vue 指令的设计实现
与angular 不同,vue的指令不是通过依赖注入实现的,而是通过全局的注册系统。指令通过调用 Vue 实例的 Vue.directive 方法并传入指令的名称和定义来注册。
一旦注册,该指令可以在该Vue实例或其后代渲染的任何模板中使用,只需在其名称前加上v-前缀即可。
指令定义是一个JavaScript对象,可以包含一个或多个生命周期钩子,如bind绑定、inserted插入、update更新和 unbind解除绑定。这些钩子将在指令生命周期的不同阶段被调用,允许你执行特定于该阶段的逻辑。
自定义指令实现v-if
Vue.directive('if', { bind: function (el, binding, vnode) { if (binding.value) { el.style.display = 'none'; } }, update: function (el, binding, vnode) { if (binding.value) { el.style.display = 'none'; } else { el.style.display = ''; } } });