2020-12-18 Vue入门学习2

博客主要介绍了Vue中的组件,包括组件是可复用的Vue实例,可在根实例中作为自定义元素。阐述了全局和局部组件,还说明了组件可通过Prop向子组件传递数据,也能用data属性定义和传递数据,此外还能自定义事件并调用Vue中定义的事件方法。

Vue中的组件

定义:组件是可复用的 Vue 实例,且带有一个名字:在这个例子中是 。我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素。

全局组件:

 <div id="app">
        <user-login></user-login>
    </div>
    <script>
        //全局组件的定义
        Vue.component("userLogin",{
           template: '<div><h2>哈哈哈</h2></div>'
        });

        var app = new Vue({
            el: "#app",
            data:{

            },methods: {

            }
        })
    </script>

局部组件:

 <div id="app">
        <login></login>
    </div>

    <!--模板标签-->
    <template id="login">
        <h2>哈哈哈</h2>
    </template>
    <script>
        //局部组件
        let login = {
           template: "#login"
        };

        var app = new Vue({
            el: "#app",
            data:{

            },methods: {

            },components:{
                login //组件名和局部组件变量名一样的话,可以省略组件名称
            }
        })
    </script>

组件可以通过 Prop 向子组件传递数据
如:Vue的data中的值可以通过v-bind绑定给组件的一个自定义属性中,在props中可以定义一个属性用于接收data的值,这样,组件中就可以使用了。

  <div id="app">
        <login :name="name"></login> <!--通过v-bind:name的方式将vuedata中的name数据绑定给name属性-->
    </div>
    <!--模板标签-->
    <template id="login">
        <h2>哈哈哈:{{name}}</h2>
    </template>
    <script>
        //局部组件
        let login = {
            template: "#login",
            props:['name'],

        };

        var app = new Vue({
            el: "#app",
            data:{
                name: "小明"
            },methods: {

            },components:{
                login //组件名和局部组件变量名一样的话,可以省略组件名称
            }
        })
    </script>

组件中也可以使用data属性来定义和传递数据
只不过定义的方式和Vue对象中有点不同:data(){ return:{name:xxx} }

<script>
        let com = {
            template:"#temp1",
            data(){  //data属性的定义要使用data(){}的形式
                return{
                    name:"小明"
                }
            }
        };

        const app = new Vue({
            el:"#app",
            components:{
                com
            }
        })
    </script>

还可以自定义事件
定义方式和vue对象中的方式一致

<script>
        let com = {
            template:"#temp1",
            data(){  //data属性的定义要使用data(){}的形式
                return{
                    name:"小明"
                }
            },methods:{
                onClickChange(){
                    alert(this.name);
                }
            }
        };

        const app = new Vue({
            el:"#app",
            components:{
                com
            }
        })
    </script>

在组件中调用vue中定义的事件方法
可以通过v-on给vue绑定一个事件,自定义事件名称,然后在组件方法中通过this.$emit("")的方式来调用vue中的方法

 <div id="app">
        <com @haha="haha"></com>
    </div>
    <template id="temp1">
        <button @click="onClickChange">点击触发事件</button>
    </template>
    <script>
        let com = {
            template:"#temp1",
            data(){  //data属性的定义要使用data(){}的形式
                return{
                    name:"小明"
                }
            },methods:{
                onClickChange(){
                   //向在这里调用Vue中的事件方法
                    this.$emit('haha');
                }
            }
        };

        const app = new Vue({
            el:"#app",
            components:{
                com
            },methods: {
                haha(){
                    alert("haha,vue中的事件");
                }
            }
        })
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值