
Vue
provide
默认情况下,provide/inject 绑定并不是响应式的
在vue3中,我们可以通过传递一个 ref property 或 reactive 对象给 provide 来改变这种行为
vue2
保持响应性可以使用函数,动态获取; 或者利用对象的响应性
父组件
provide() {
return {
text: () => this.text, // 函数
textObj: {
text: this.text
}
};
},
data() {
return {
text: 'provide',
};
},
子组件
export default {
inject: ['text', 'textObj'],
computed: {
comText() {
return this.text();
},
text() {
return this.textObj.text;
}
},
};
Ref
1 | |
当你在模板中使用了一个 ref,然后改变了这个 ref 的值时,Vue 会自动检测到这个变化,并且相应地更新 DOM。这是通过一个基于依赖追踪的响应式系统实现的。当一个组件首次渲染时,Vue 会追踪在渲染过程中使用的每一个 ref。然后,当一个 ref 被修改时,它会触发追踪它的组件的一次重新渲染。
在标准的 JavaScript 中,检测普通变量的访问或修改是行不通的。然而,我们可以通过 getter 和 setter 方法来拦截对象属性的 get 和 set 操作。
该 .value 属性给予了 Vue 一个机会来检测 ref 何时被访问或修改。在其内部,Vue 在它的 getter 中执行追踪,在它的 setter 中执行触发。
指令
注册指令
1 | |
钩子
1 | |
参数:
指令的钩子会传递以下几种参数:
el:指令绑定到的元素。这可以用于直接操作 DOM。binding:一个对象,包含以下属性。value:传递给指令的值。例如在v-my-directive="1 + 1"中,值是2。oldValue:之前的值,仅在beforeUpdate和updated中可用。无论值是否更改,它都可用。arg:传递给指令的参数 (如果有的话)。例如在v-my-directive:foo中,参数是"foo"。modifiers:一个包含修饰符的对象 (如果有的话)。例如在v-my-directive.foo.bar中,修饰符对象是{ foo: true, bar: true }。instance:使用该指令的组件实例。dir:指令的定义对象。
vnode:代表绑定元素的底层 VNode。prevNode:代表之前的渲染中指令所绑定元素的 VNode。仅在beforeUpdate和updated钩子中可用。
binding:
1 | |
简化
1 | |
插件
注册插件
1 | |
i18n插件
1 | |
Provide / Inject
1 | |
