基本示例
这里有一个 Vue 组件的示例:
// 定义一个名为 button-counter 的新组件Vue.component('button-counter', {data: function () {return {count: 0}},template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'})
组件是可复用的 Vue 实例,且带有一个名字:在这个例子中是
。我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用:
<div id="app"><button-counter></button-counter></div><script>// 定义一个名为 button-counter 的新组件Vue.component('button-counter', {data: function () {return {count: 0}},template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'})var app = new Vue({el: "#app",data: {},methods: {}});</script>
因为组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data、computed、watch、methods 以及生命周期钩子等。仅有的例外是像 el 这样根实例特有的选项。
组件的复用
你可以将组件进行任意次数的复用:
<div id="components-demo"><button-counter></button-counter><button-counter></button-counter><button-counter></button-counter></div>
注意当点击按钮时,每个组件都会各自独立维护它的 count。因为你每用一次组件,就会有一个它的新实例被创建。
data 必须是一个函数
当我们定义这个 组件时,你可能会发现它的 data 并不是像这样直接提供一个对象:
data: {count: 0}
取而代之的是,一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝:
data: function () {return {count: 0}}
否则就使用一个变量的话,点击一个按钮就可能会影响到其它所有实例
局部的组件
- 这里有两种组件的注册类型:全局注册和局部注册。
- 通过
Vue.component是全局注册的 - 全局注册的组件可以用在其被注册之后的任何 (通过
new Vue) 新创建的 Vue 根实例,也包括其组件树中的所有子组件的模板中。
- 通过
注册组件
可以通过一个普通的 JavaScript 对象来定义组件,然后在 components 选项中定义你想要使用的组件:
- 对于
components对象中的每个 property 来说,其 property 名就是自定义元素的名字,其 property 值就是这个组件的选项对象。<div id="myApp"><my-weather></my-weather></div><script>var WeatherComponent = {template: '<div>今天下雨,随它去吧!</div>'};var myApp = new Vue({el: '#myApp',data: {},components: {'my-weather': WeatherComponent},});</script>
注意:局部注册的组件在其子组件中不可用。
如果你希望 ComponentA 在 ComponentB 中可用,则你需要这样写:
var ComponentA = { /* ... */ }var ComponentB = {components: {'component-a': ComponentA},// ...}
