Vue组件及数据传递

57 阅读1分钟

创建组件 (有多种方式列出一种)

使用Vue.extend来创建组件模板对象

var com1 = Vue.extend({
    template:'<h3>这是使用Vue.extend创建的组件</h3>'
    //通过template属性,制定了组件要展示的html结构
  })

使用Vue.component完场组件的创建

Vue.component('组件的名称',创建出来的组件模板对象)

Vue.component('myCom1',com1)

使用组件

如果要使用组件,直接把组件的名称,以html标签的形式引入即可

<my-com1></my-com1>

具体细节参考

blog.csdn.net/xukongjing1…

www.runoob.com/vue2/vue-co…

父组件传子组件

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
       <abc v-bind:goods="goodsList">
       </abc>
    </div>
    
    <template id="abc">
        <div>
            <div v-for="good in goods">
                <p>{{good.name}}</p>
                <p>{{good.price}}</p>
            </div>
        </div>
    </template>

    <script>
        // 子组件可以有自己的data
        Vue.component("abc",{
            template:"#abc",
            props:["goods"]
        });
        new Vue({
            el:'#app',
            data:{
               goodsList:[
                {name:"aaa",price:100},
                {name:"bbb",price:101},
                {name:"ccc",price:102},
                {name:"ddd",price:103}
               ]
            }
        })
    </script>
</body>
</html>

主要是利用 子组件的 props属性, 在子组件标签上将父组件的属性与子组件中的属性绑定即可

子组件传父组件

流程:在子组件中通过$emit来触发指定的事件 在父组件中通过v-on来监听这个事件

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        // 父组件通过v-on监听子组件的事件
       <abc @zzz="recived">
       </abc>
    </div>
    
    <template id="abc">
        <div>
           <input type="text" v-model="content" @keyup.enter="search()">
        </div>
    </template>

    <script>
        // 子组件可以有自己的data
        Vue.component("abc",{
            template:"#abc",
            data() {
                return {
                    content:""
                }
            },
            methods: {
             search:function(){
                //通过自定义事件将内容传递给父组件
                //zzz 就是自定义事件名
                this.$emit("zzz",this.content)
             }   
            }
        });
        new Vue({
            el:'#app',
            methods:{
                recived:function(data){
                    console.log(data);
                }
            }
        })
    </script>
</body>
</html>