v-model
v-model 本质上不过是语法糖(v-bind:value 和 v-on:input)
1 | Vue.component('base-checkbox', { |
现在可以在父组件传入 title 属性值,并且在子组件中可通过事件修改
1 | <base-input v-model="title"></base-input> |
父组件向子组件传值
props
可以说这是比较常见的一种Vue父组件传值给子组件的方法。
注:prop为单向流,子组件不应直接修改该值。应该使用计算属性使用props
1 | Vue.component('base-list', { |
props应该尽可能的将属性写完成,这样可以更好地防止出乎意料的错误发生。
如果需要传递对象所有属性,可直接省略对象名。
1 | <!-- 注意 v-bind 不可简写 --> |
$children / $refs
所有的子组件都会保存在$children数组中,该数组乱序。
注:在控制台将Vue实例打印出来我们可以发现很多以$和(下划线)开头的属性。$开头的属性是提供给用户使用的, 开头的属性是Vue内部使用的。开发者不应该直接修改以 _ 开头的属性,以免造成不可预料的错误(当然,直接修改也有很多surprise >_<)。
直接给子元素添加ref属性,通过$refs直接访问。
1 | <div id="app"> |
1 | Vue.component('base-title', { |
$attrs
官网定义:包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定。
这句话看起来有点绕,但其实很好理解。大白话就是:父组件传入子组件,但是props中没有定义的属性。
注:该属性只读
该属性在传值中并不常用,但是在创建高级别的组件/多层嵌套的时候非常有用。
1 | <div id="app"> |
1 | // 子组件 |
$listeners
包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。
和$attrs属性一样,该属性为只读,并且在创建更高层次的组件时很有用。
1 | <div id="app"> |
1 | // 子组件 |
子组件向父组件传值
$emit
触发当前示例上的时间
第一个参数为事件名,第二个参数为需要传递的值(如有多个需要传递的值,可以使用对象的方式传递)
其实绑定在事件上的函数是以数组的形式存储的,所以对于一个事件可能会触发多个事件。
$parent
父示例,如果有的话
直接暴力的访问父组件,并且修改属性值。(个人觉得这个方法不太好。。。)
1 | Vue.component('base-card', { |
.sync
这其实是一个缩写。
1 | <base-name |
1 | // 子组件调用 |
EventBus
事件总线(个人觉得用起来很方便,但是不太容易维护)
使用:
- 新建一个Vue示例(或直接在根组件添加一个特殊属性,如$bus)
1
const eventBus = new Vue();
- 在该实例上添加事件
1
2
3eventBus.$on('change', (value) => {
// do something
}) - 调用事件
1
eventBus.$emit('chage','new value')
- 移除事件
1
2
3eventBus.$off('change');
// 当然也可以移除某个函数
// eventBus.$off('change', fun);
Vuex
作为Vue的核心插件,这里就不再多多累赘了,可详见官网Vuex