当内置指令不够用时,自定义指令把对 DOM 的直接操作收拢成一条声明式的 v-xxx 绑定。它通过 app.directive 全局注册或 directives 选项局部注册,钩子函数 mounted、updated、unmounted 分别在元素挂载、更新、卸载时触发,第一个参数固定是绑定的 DOM 元素。
典型场景是自动聚焦输入框、权限按钮隐藏、拖拽元素等与业务无关的 DOM 交互。设计指令时尽量只做 DOM 层面的操作,不要在指令里读写响应式状态,否则会让数据流向难以追踪。指令名用 kebab-case 注册,模板里 v-focus 对应注册名 focus 才能正确解析。
app.directive('focus', { mounted(el) { el.focus(); } }); // 模板中:<input v-focus> // 带参数:<div v-permission="'admin'">管理后台</div> app.directive('permission', { mounted(el, binding) { if (binding.value !== 'admin') el.remove(); } });