组件
#全局注册
可以通过以下方式创建一个 Vue 实例
new Vue({
el:"#some-element",
//选项
})
要注册一个全局组件可以使用Vue.component(tagname, options), 组件在注册之后,便可以作为自定义元素 在一个实例的模板中使用。注意确保在初始化根实例之前注册组件
Vue.component("my-component", {
//选项
})
#局部注册
不必把每个组件都注册到全局。你可以通过某个 Vue 实例/组件的实例选项 components 注册仅在其作用域中可用的组件:
var Child = {
template:"<div>A custom component</div>"
}
new Vue({
component:{
//<my-component> 将只在父组件模板中可用
"my-component":Child
}
})
#data 必须是函数
构造 Vue 实例时传入的各种选项大多数都可以在组件里使用。只有一个例外:data 必须是函数。
<div id="example-2">
<my-component></my-component>
</div>
Vue.component("my-component",{
template:"<button v-on:click='counter += 1'>{{counter}}</button>",
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:'<span>{{message}}</span>'
})
然后我们可以这样向它传入一个普通的字符串
<child message="hello"></child>
#camelCase vs kebab-case
HTML 特性是不区分大小写的。所以,当使用的不是字符串模板时,camelCase (驼峰式命名) 的 prop 需要转换为相对应的 kebab-case (短横线分隔式命名)
Vue.component('child',{
props:["myMessage"],
template:"<span>{{myMessage}}</span>"
})
<child my-message="hello"></child>
如果使用字符串模板,则没有这些限制。
#动态Prop
与绑定到HTML特性相类似,可以用v-bind来动态的将prop绑定到父组件的数据.每当父组件的数据变化时,该变化也会传导给子组件
<div>
<input
网友评论