一个异步校验表单内容的自定义指令+hook
开头
前段时间遇到需要给表单rules添加异步校验敏感词需求,遂记录下实现过程
directive
先放上vue官方文档对自定义指令地址: 地址
可以看到 bind 与 update 生命周期钩子为这次功能所要用到的,在vnode绑定当前指令及更新时
在官方文档描述中,指令生命钩子的第三个参数也就是:
- vnode:Vue 编译生成的虚拟节点。移步 VNode API 来了解更多详情
vnode
结合源码可以理解,vnode是vue的虚拟dom,可以理解为一个个装有vue组件配置的对象,经过一系列数据劫持及模板编译渲染等复杂过程,最终生成到页面上。
以及了解vnode的挂载过程及相关props更新过程等,可以借助相关hook
- 具体看此处: 组件props更新原理
当 props 数据变化一定会触发父组件的重新渲染,而远程请求接口后,拿到结果可以手动触发当前表单中的rules规则进行改变,从而达到每次请求接口后都能渲染出错误信息及交互保持一直。并且在业务代码中无需写大量rules
直接上代码
1 | import { fetchxxx } from '@/api' |
结语
关键代码其实就在
1 | vnode.componentOptions.propsData.rules = [validator] |
可以借组自定义指令中传递参数实现更复杂功能