Vue学习的第十天

组件


#全局注册

可以通过以下方式创建一个 Vue 实例

new Vue({

     el:"#some-element",

     //选项

})

要注册一个全局组件可以使用Vue.component(tagname, options), 组件在注册之后,便可以作为自定义元素  在一个实例的模板中使用。注意确保在初始化根实例之前注册组件

Vue.component("my-component", {

     //选项

})

#局部注册

不必把每个组件都注册到全局。你可以通过某个 Vue 实例/组件的实例选项 components 注册仅在其作用域中可用的组件:

var Child = {

     template:"

A custom component
"

}

new Vue({

     component:{

            // 将只在父组件模板中可用

           "my-component":Child

     }

})

#data 必须是函数

构造 Vue 实例时传入的各种选项大多数都可以在组件里使用。只有一个例外:data 必须是函数。

     

Vue.component("my-component",{

     template:"",

    data:function(){

         return {counter:0}

    }

})

new Vue({

     el:"#example-2"

})

#组件组合

组件设计初衷就是要配合使用的,最常见的就是形成父子组件的关系:组件 A 在它的模板中使用了组件 B。它们之间必然需要相互通信:父组件可能要给子组件下发数据,子组件则可能要将它内部发生的事情告知父组件。然而,通过一个良好定义的接口来尽可能将父子组件解耦也是很重要的。这保证了每个组件的代码可以在相对隔离的环境中书写和理解,从而提高了其可维护性和复用性。

在 Vue 中,父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息。

#使用Prop传递数据

组件实例的作用域是孤立的.这意味着不能在子组件的模板内直接引用父组件的数据.父组件的数据需要通过prop才能下发到子组件中.

子组件要显示地用props选项声明它预期的数据

Vue.co,ponent('child', {

     props:['message'],

     template:'{{message}}'

})

然后我们可以这样向它传入一个普通的字符串

#camelCase vs kebab-case

HTML 特性是不区分大小写的。所以,当使用的不是字符串模板时,camelCase (驼峰式命名) 的 prop 需要转换为相对应的 kebab-case (短横线分隔式命名)

Vue.component('child',{

     props:["myMessage"],

     template:"{{myMessage}}"

})

如果使用字符串模板,则没有这些限制。

#动态Prop

与绑定到HTML特性相类似,可以用v-bind来动态的将prop绑定到父组件的数据.每当父组件的数据变化时,该变化也会传导给子组件

你可能感兴趣的:(Vue学习的第十天)