vue 指令修饰符及自定义指令

指令修饰符

指令:参数.修饰符 = 值
修饰符是指令的(不是参数的),如属性是对象的
不同的指令有不同的参数,有的指令也可能没有修饰符,有的指令可能有不同的修饰符
不同的指令可能有相同的修饰符,使用修饰符一定要找 对应指令 下的修饰符
多看api 才能知道有哪些修饰符,修饰符可以连着用, 自定义修饰符可以直接跟在参数,也可以跟在数据后
自定义指令是为了满足千奇百怪的场景需求,这种场景下需要用到自定义指令
解决个性化需求这也是是他存在的意义
自定义修饰符 是自定义的
指令.修饰符
自定义修饰符是为了节省自定义指令的数量提高实用性,在两个功能都类似的情况下只有部分有差异的情况下用修饰符来解决

    <div id="app">
        <!--lazy 取代监听(取代实时更新) lazy失去焦点时才触发(更新)  -->
        <input type="text" v-model.lazy ="val">
        <div>{{val}}</div>
        <hr>
        <input type="text" v-model.number = "val"> + <input type="text" v-model.number = "v2"> = {{val+v2}}
     <!--刷新页面获取的是data数据相加没问题 但是后面值发生改变value返回给data的数据是字符串,这里要转类型-->
    </div>
        let app = new Vue({
            el:"#app",
            data:{
                val:1,
                v2:2
            }
        })

自定义指令

在面试介绍技术时,在工作中介绍项目中 一定要带版本号这个很重要
自定义指令:全局指令,局部指令,区别点在于其写的位置,全局写在配置对象上面
常用的内部指令是在构造器里,进行编程,vue里面写好了的
全局api在构造器外 vue并没有提供给我们的,但是vue给我们提供了接口,我们自定义的

        // 注册一个全局自定义指令 v-focus
        // 自定义不需要加v-  参数1:指令名称 参2:配置对象(方法名不是自定义固定的) 
        Vue.directive("focus",{  //           整个配置对象就是一个生命周期
            // 当被绑定元素插入到 DOM中时触发,
            inserted:function(el){ //el形参 在谁身上绑定谁就是实参
                console.log("我被触发了");
                el.focus();
            }            
        })
        let app = new Vue({
            el:"#app"
        })
    <div id="app">
                            <!-- autofocus页面加载时获取焦点 -->
        <!-- <input type="text" autofocus> -->
        <input type="text" v-focus>
    </div>

钩子函数
bind inserted update componentUpdated unbind 钩子函数,
存在的意义,可以让开发者灵活的控制指令功能的时间 也即是说不同的条件下触发不同的功能
一个指令对象可以提供一下几个钩子函数(均为可选,可写可不写)
bind: 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置
inserted: 官 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中) 当被绑定元素插入到 DOM中时触发
update: 所在组件更新的时候调用
componentUpdated : 所在组件更新完成后调用
unbind: 只调用一次,指令与元素解绑时调用

不同的生命周期钩子函数在调用的时候同时会接收到传入的一些不同的参数
所有的钩子函数都有以下参数,比官网解释清晰,通俗
el: 指令所绑定的元素,可以用来直接操作 DOM
binding: 一个对象,包含以下属性:
name: 指令名,不包括 v- 前缀
value: 指令的绑定值(作为表达式解析后的结果)
expression : 指令绑定的表达式(字符串)
arg : 传给指令的参数,可选
modifiers : 传给指令的修饰符组成的对象,可选,每个修饰符对应一个布尔值
oldValue : 指令绑定的前一个值,仅在update 和componentUpdated钩子中可用,无论值是否改变都可用
vnode: Vue 编译生成的虚拟节点。移步 VNode API 来了解更多详情。
除了 el 之外,其它参数都应该是只读的,切勿进行修改。如果需要在钩子之间共享数据,建议通过元素的 dataset 来进行
oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

    <div id="app">
        <div v-prest.inst="5+9"></div>
        <!-- 修饰符 等号后面也可是个对象 -->
    </div>
        Vue.directive("prest",{
            bind(el,{name,value,modifiers,expression,arg,oldValue}){
                // {}里的所有东西在binding对象里 这里解构 直接写,6个常用其他去官网查
                console.log(el)  //输出绑定的dom元素,可用来直接dom操作
                console.log(name) //输出自定义指令的名称 
                console.log("表达式的结果"+value)
                console.log(modifiers); //输出指定以修饰符的 布尔值为true
                console.log("输出字符串形式的表达式"+expression);
                // console.log("参数+"+arg) //传给指令的参数,
            }
        })
        let app = new Vue({
            el:"#app",
            data:{
                istrue:1+2,
            }
        })
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 3中,你可以通过`app.directive`方法来注册自定义指令。以下是一个简单的示例: ```javascript // 在创建Vue应用之前注册自定义指令 const app = Vue.createApp({}); // 注册全局自定义指令 app.directive('myDirective', { // 指令的生命周期钩子函数 mounted(el, binding) { // 指令绑定到元素上时触发 console.log('Directive mounted'); // 可以访问指令的参数和修饰符 console.log('Directive arguments:', binding.arg); console.log('Directive modifiers:', binding.modifiers); }, updated(el, binding) { // 元素更新时触发 console.log('Directive updated'); }, unmounted(el, binding) { // 指令从元素上解绑时触发 console.log('Directive unmounted'); } }); // 创建Vue实例 const vm = app.mount('#app'); ``` 在上面的示例中,我们使用`app.directive`方法注册了一个名为`myDirective`的全局自定义指令指令对象中包含了指令的生命周期钩子函数,例如`mounted`、`updated`和`unmounted`。你可以在这些钩子函数中执行自定义逻辑。 使用自定义指令时,你可以在模板中通过`v-my-directive`来调用它,并传递一些参数和修饰符。例如: ```html <div v-my-directive:arg.modifier="value"></div> ``` 当指令绑定到元素上时,`mounted`钩子函数将被触发,并且可以访问指令的参数和修饰符。在上面的示例中,我们通过`binding.arg`和`binding.modifiers`分别获取到了`arg`和`modifier`的值。 希望这能帮助你开始在Vue 3中使用自定义指令

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason–json

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值