vue自定义指令 html,[Vue]Vue的自定义指令

什么是Vue自定义指令?

Vue自定义指令用起来就像Vue内置的v-model、v-on...之类,只不过实现了一些自己想要的功能。因为Vue自定义指令的钩子函数会传入一个el,它是自定义指令绑定到的那个DOM元素,所以Vue自定义指令可以用来直接和DOM打交道。

如何注册一个指令?

自定义指令分为全局和组件内的局部指令。全局自定义指令注册方法:Vue.directive('myDirective', {

// inserted是内置的钩子函数

inserted: function (el) {

// 一些操作...

},

// 指令的其他内容和钩子函数,如果需要的话...

})

组件内的局部指令注册方式:new Vue({

el: '#app',

components: {

'myComponent': {

// 一些组件选项...

directives: {

myDirective: { /* 指令的内容和钩子函数 */ }

}

// 其他组件选项...

},

}

})可能有像我一样的初学者(更可能就我自己)刚开始对new Vue({ ... components: {...} ... })和export default {...}很疑惑,搞不清这两种东西是什么。后一种叫做单文件组件,链接在这:https://cn.vuejs.org/v2/guide/single-file-components.html,使用Vue-CLI,开发Vue程序,就默认用这种开发模式。在单文件组件模式中,初始化Vue往往放在src的根目录中的main.js中,包括app.vue也是一个组件。

自定义指令的每个钩子函数都会传入4个参数:`el`:被绑定的元素,值如下(示例):'

`binding`:包含传入的各种参数,比如v-myDirective:1000="click",1000可以用binding.arg获取,'click'可以用binding.value获取。

`vnode`、`oldVnode`:这两个和虚拟DOM相关,请阅读Vue自定义指令和虚拟DOM的文档

实例:长按手势指令

下面定义一个长按手势指令,用来实现长按某一个元素,执行某些操作,比如弹出一个菜单。

longPress.js:export default {

bind: function (el, binding) {

if (typeof binding.value !== 'function') {

return;

}

let timer = null;

let start = (e) => {

timer = setTimeout(function () {

console.log('long press');

timer = null;

}, binding.arg? Number(binding.arg) : 1000);

};

let cancel = () => {

if (timer !== null) {

clearTimeout(timer);

timer = null;

}

};

el.addEventListener('touchstart', start);

el.addEventListener('touchmove', cancel);

el.addEventListener('touchend', cancel);

}

}

使用这个指令的组件(单文件组件):

import longpress from 'longPress.js';

export default {

directives: { longpress },

methods: {

longPress() {

//console.log('longPress')

}

}

}

这就完成了一个简单的自定义指令。在长按item元素4秒后,会在控制台打印"long press",并且会执行传入的函数longPress。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue自定义指令失效的原因可能有很多种情况。根据引用和引用的内容,可以推测一些可能的原因和解决方法。 1. 指令未正确注册:在Vue自定义指令需要先进行注册,然后才能在模板使用。请确保自定义指令已经正确地注册到Vue实例。你可以使用全局注册或局部注册的方式进行注册。全局注册可以通过Vue.directive方法全局注册所有的指令,如引用所示。局部注册可以在组件内部使用directives选项进行指令的注册。 2. 指令名称不正确:请确保你在模板正确地使用自定义指令的名称。指令名称应该是以v-开头的,比如v-imgerror。 3. 指令绑定值错误:自定义指令可以通过绑定值来传递参数。请确保你正确地传入了绑定值,并且在指令定义正确地使用了这些值。 4. 指令逻辑错误:自定义指令的逻辑代码可能有问题,导致指令无法正常工作。请检查指令的代码逻辑,确保代码没有错误。 5. 图片加载问题:自定义指令在处理图片加载问题时可能会出现失效的情况。请检查你的指令逻辑,确认图片加载错误时是否正确地触发了相关的处理逻辑。 总结来说,如果Vue自定义指令失效,首先要检查指令是否正确注册、名称是否正确、绑定值是否正确、代码逻辑是否正确,以及是否正确处理了图片加载问题。通过排查这些可能的原因,你应该能够找到并解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值