在Vue 中可以把一系列复杂的操作包装为一个指令。
什么是复杂的操作?
我的理解是:复杂逻辑功能的包装、违背数据驱动的 DOM 操作以及对一些 Hack 手段的掩盖等。我们总是期望以操作数据的形式来实现功能逻辑。
bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。 inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。 update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。 componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。 unbind: 只调用一次,指令与元素解绑时调用。
template
script
{{msg}}
',props: { msg: String } } new Vue({ el: '#app',data: { msg: 'Hello' },components: { myComp: myComp },methods: { update: function () { this.msg = 'Hi' },uninstall: function () { this.msg = '' },install: function () { this.msg = 'Hello' } } })页面加载时
bind inserted
组件更新时
点击“更新”按钮,更改数据触发组件更新。
update componentUpdated
卸载组件时
点击“卸载”按钮,数据置空否定判断以触发组件卸载。
unbind
点击“安装”按钮,数据赋值肯定判断以触发组件重新安装。
bind
inserted
区别
从案例的运行中,对 5 个钩子函数的触发时机有了初步的认识。存疑的也就是
bind 和 inserted
据文档所说,插入父节点时调用 inserted,来个测试。
bind 时父节点为 null,inserted 时父节点存在。
update 和 componentUpdated
关于这两个的介绍,从字眼上看感觉是组件更新周期有关,继续验证。
没毛病,update 和 componentUpdated 就是组件更新前和更新后的区别。
结论
文档说的没错…… nofollow" target="_blank" href="https://jsfiddle.net/imys/twbv0sov/1/">Demo
最佳实践
根据需求的不同,我们要选择恰当的时机去初始化指令、更新指令调用参数以及释放指令存在时的内存占用等。
比较常见的场景是:用指令包装一些无依赖的第三方库以扩展组件功能。而一个健壮的库通常会包含:初始化实例、参数更新和释放实例资源占用等操作。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。