自定义指令报错可能存在的问题
1、从各位大佬那里搜罗来的,比如:v-model 写成 v-modle或者其他,总之保证自定义指令名称在定义和使用时务必保持一致;
2、自定义指令不可采用小驼峰命名法?比如:antiShake不可以,但是可以写成antishake或Antishake;我本人目前使用vue2版本,目前使用这种解决办法无效,最终解决办法中依然是采用的小驼峰命名法;
3、注册自定义指令务必在new Vue实例之前(这个应该都不会犯错吧)。
4、单独在directives文件夹下面列出了页面所有的自定义指令,使用之前需要在main.js页面先引入,未引入直接使用指令就会报上方错误,我就是个傻子,在这里弄了好久,自己以为已经引入了(同时开启多个项目,原来是别的项目引入了,不要太傻)
正确写法

比如:自定义防抖指令,我理解的防抖指令大白话就是N秒内点击多次,只会执行第一次,比如下方代码是500毫秒内只执行一次,具体时间可根据自己项目情况去修改。

//lib目录下的directives目录下的antiShake.js
import Vue from 'vue';
/*防抖*/
Vue.directive('antiShake', {
	inserted: function(el, binding) {
	    const { callback, time } = binding.value
        el.callback = callback
        el.time = time
        el.timeCall = null
        el.addEventListener('click', () => {
            clearTimeout(el.timeCall)
            el.timeCall = setTimeout(() => {
                el.callback()
            }, el.time || 500)
        })
	},
	update: function(el, binding) {
        const { callback, time } = binding.value
        el.callback = callback
        el.time = time
    },
}
//main.js引入
import './lib/directives/antiShake.js'
谨慎在组件上使用自定义指令

vue官网提到:指令不能通过 v-bind=“$attrs” 来传递给一个不同的元素,故并不推荐在组件上使用自定义指令。

本文仅代表菜鸟本人的理解,如有写的不对的地方,欢迎各位大佬及时帮忙纠正

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐