基本示例
组件是可复用的 Vue 实例, 且带有一个名字, 我们可以通过 new Vue 创建的 Vue 跟实例中, 把这个组件当做自定义元素来使用
组件与 new Vue 接受相同的选项
组件的
data必须是一个函数, 它返回一个对象的独立的拷贝
组件注册可分为 全局注册和局部注册
1 | Vue.component('hello-world', { |
组件的复用
组件可以进行任意次数的复用, 每个组件都会各自维护它的实例
1 | <div id="app"> |
组件的组织
一个应用会以一颗嵌套的组件树的形式来组织:
通过 Prop 向子组件传递数据
Prop 是可以在组件上注册的一些自定义 attribute, 当一个值传递给一个 prop attribute 的时候, 他就变成了那个组件实例的一个属性.
我们可以用一个 props 选项将其包含在该组件可接受的 prop 列表中
1 | Vue.component('hello-world', { |
单个根元素
每个组件必须只有一个根元素
当构建一个子组件的时候, 模板内最终包含的内容远不止一个标题, Vue 要求每个组件必须只有一个根元素, 可以将模板的内容包裹在一个父元素内.
1 | // parent 父组件 |
监听子组件事件
有时候, 我们需要在子组件内部传递一些内容到父元素
Vue 实例提供了一个自定义事件的系统来解决这个问题, 父组件可以像处理 native DOM 事件一样通过 v-on 监听子组件实例的任意事件
1 | // 父组件 接受一个由子元素提交的自定义方法 |
在组件上使用 v-model
自定义事件也可以用于创建支持 v-model 的自定义输入组件
1 | <my-input v-model="searchText" /> |
等价于
1 | <my-input v-bind:value="searchText" v-on:input="searchText = $event" /> |
为了让它正常工作, 这个组件内的 <input> 必须:
- 将其 value attribute 绑定到一个名叫 value 的 prop 上
- 在其 input 事件被触发时, 将新的值通过自定义的 input 事件抛出
通过插槽分发内容
和 HTML 元素一样, 我们经常需要向一个组件传递内容
1 | <!-- 父组件使用子组件 --> |
动态组件
有的时候, 在不同的组件之间进行动态切换时非常有用的
我们可以通过 Vue 的<component>元素加一个特殊的isattribute 来实现currentTabComponent 可以包括
- 已注册组件的名字
- 一个组件的选项对象
1 | // 组件会在 currentTabComponent 改变时改变 |