vue 自定义指令1 实现一个简单的n放大10倍的自定义指令(用函数形式定义)

本文详细介绍了Vue中自定义指令的使用方法,包括如何通过函数形式定义指令,并探讨了指令与计算属性的区别,同时提供了调用自定义指令的两种验证方式。

由于要自定义指令所以,要直自己操作dom元素

 

注意自定义指令时直接写自定义指令名称

第一种写法写成函数形式,不难看出,其实自定义指令就是一个函数

定义新的对象 directives:{

        big(){

}

}

 

但是这个跟,计算属性不一样,不是靠return实现的

主要依靠,它的两个参数big(a,b)

 a为真实dom元素   一般写成element 表示对应元素

 

第一种验证:

加console.dir(a)


第二种验证:

instanceof 判断谁是谁的实例

再看b主要就是得到其中的value 一般写成binding表示绑定的意思

 

 

 

所以实现

当按钮把n+1发现自定义指令,也发生再次调用

它被调用的情况1.第一次执行,2.指令所在的模板被重新加载

验证:

当我们修改name的值发现,big指令仍然被调用

 

 

 

 

 

 

 

### Vue.js 中自定义指令的详细用法 #### 一、什么是自定义指令Vue 提供了一些内置指令,比如 `v-text` 和 `v-if` 等。然而,在某些场景下这些内置指令可能无法满足需求,因此 Vue 允许开发者创建自己的指令来扩展功能[^2]。 #### 二、注册全局与局部自定义指令 自定义指令可以通过两种方式注册:全局和局部。 - **全局注册**:通过 `app.directive(name, definition)` 方法实现,适用于整个应用范围内的指令。 - **局部注册**:在组件选项中的 `directives` 属性内声明,仅限于该组件内部使用。 #### 三、钩子函数及其生命周期 当绑定到 DOM 节点上自定义指令会经历一系列钩子函数调用过程: 1. **bind**: 只调用一次,指令第一次绑定到元素调用。 2. **inserted**: 当被绑定的元素插入父节点调用。 3. **update**: 所在组件的 VNode 更新调用,但是可能发生在其子 VNode 更新之前。 4. **componentUpdated**: 指令所在组件的 VNode 及其子 VNode 都更新后调用。 5. **unbind**: 只调用一次,指令与元素解绑调用。 以下是各阶段的具体说明以及示例代码: ```javascript // 定义一个简单自定义指令 const app = Vue.createApp({}); app.directive('focus', { bind(el, binding, vnode) { console.log('Bind:', el); // 绑定触发 }, inserted(el) { el.focus(); // 插入DOM树之后自动获取焦点 }, update(el, binding) { console.log('Update:', binding.value); } }); ``` 上述例子展示了如何利用 `bind`, `inserted` 来设置默认行为,并监控数据变化[^1]。 #### 四、参数传递给自定义指令 除了基本的功能外,还可以向自定义指令传参,增强灵活性。例如下面的例子演示了一个带有修饰符 `.lazy` 的输入框验证逻辑: ```html <input v-my-validator.lazy="validationRules"> ``` 对应的 JavaScript 实现如下所示: ```javascript app.directive('myValidator', (el, binding) => { const modifiers = binding.modifiers; if(modifiers && modifiers['lazy']){ // 延迟执行特定操作... } let rules = binding.value || []; function validate(inputValue){ return rules.every(rule=>rule.test(inputValue)); }; el.addEventListener('input',(e)=>{ e.target.setCustomValidity(validate(e.target.value)? '':'Invalid Input'); }); }); ``` 此部分解释了如何接收来自模板层面上的数据并通过回调处理业务逻辑[^3]。 #### 五、实际案例分析——数值放大器 为了更直观理解以上理论知识点的应用价值,我们来看一段完整的实例程序片段: ```html <template> <div id="example"> <p>原始数字:<strong>{{number}}</strong></p> <p><span v-multiply="multiplier">{{number}}</span>x{{multiplier}}=<span ref="result"></span></p> </div> </template> <script> export default{ directives:{ multiply:{ mounted:function(el,binding,vnode){ var resultElement=vnode.refs.result; resultElement.textContent=(binding.value*parseFloat(vnode.context.number)).toFixed(2); } } }, data(){ return{ number:7,multiplier:8}; } } </script> ``` 这里实现了动态计算乘积并显示结果的效果。 --- ### 总结 综上所述,Vue 自定义指令提供了一种强大而灵活的方式来操控 DOM 或者封装复杂的交互模式。无论是简单属性修改还是复杂事件监听都可以借助它完成高效开发工作流转换[^2].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值