组件
组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树
- 创建组件的两种方式:1 全局组件 2 局部组件
- Vue实例中的配置项(如:methods、filters、watch、computed、directives、生命周期钩子函数)都可以在组件中使用
全局组件
- 说明:全局组件在所有的vue实例中都可以使用
- 注意:先注册组件,再初始化根实例
- 注意:组件中的
data
必须是函数
1 | // 1 注册全局组件 |
- template属性的值可以是:
- 1 模板字符串
- 2 模板id
1 | <!-- 2 模板id 示例 --> |
extend
:使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。
1 | // 注册组件,传入一个扩展过的构造器 |
局部组件
- 说明:局部组件,是在某一个具体的vue实例中定义的,只能在这个vue实例中使用
1 | var Child = { |
- 具体实例:
<div id="app"> <parent></parent></div>
1 | <script> |
组件通讯
父组件到子组件
- 方式:通过
props
属性来传递数据 - 注意:属性的值必须在组件中通过
props
属性显示指定,否则,不会生效 - 说明:传递过来的
props
属性的用法与data
属性的用法相同
1 | <hello msg="120"></hello> |
子组件到父组件
- 方式:父组件给子组件传递一个函数,由子组件调用这个函数
- 说明:借助vue中的自定义事件(v-on:cunstomFn=”fn”)
$emit()
:触发事件
1 | <hello @pfn="parentFn"></hello> |
非父子组件通讯
在简单的场景下,可以使用一个空的 Vue 实例作为事件总线
$on()
:绑定事件
1 | var bus = new Vue() |
- 示例:组件A —> 组件B
1 | <!-- 组件A: --> |