vue 的自定义指令

具体解说在代码中了,建议自己运行一遍,看后台输出更容易理解

函数式与对象式都有涉及

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue自定义指令</title>
</head>

<body>
    <div id="app">
        <p>vue自带的的指令</p>
        <h3 v-html="test"></h3>
        <h3 v-text="test" v-bind:type="test"></h3>
        <!-- 这里主要讲vue的自定义指令,vue本身自带的就不多描述了 -->
        <hr>
        <p>自定义指令</p>
        <h3 v-h3="num"></h3>

        <input type="text" v-input="num2">

    </div>


    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el: "#app",
            data() {
                return {
                    test: "你好",
                    num: 1,
                    num2: "哈哈"
                }
            },
            //自定义指令(函数式 和 对象式 都是在directives)
            //要用directives:{}的形势,用directives(){}无法显示(element 和 binding) 
            directives: {
                //1.v-h在初始化的时候执行,
                //2.v-h在重新渲染时候执行
                //自定义指令-函数式
                h3(element, binding) {
                    console.log("element", element); // element 拿到的是当前标签的的对象(这里是<h3></h3>)
                    console.log("binding", binding); // binding 拿到的是 num 的值,要用.value来使用
                    element.innerText = binding.value
                },



                //对象式
                input: {
                    //三个函数:bind:绑定,inserted:插入文档后,update:数据或页面更新
                    bind(element, binding) {
                        // element 和 binding 拿到的东西和上面一样
                        console.log("element", element);
                        console.log("binding", binding);
                        element.value = binding.value
                    },
                    inserted(element, binding) {
                        // element 和 binding 拿到的东西和上面一样
                        console.log("element", element);
                        console.log("binding", binding);
                        element.focus()
                    },
                    update(element, binding) {
                        // element 和 binding 拿到的东西和上面一样
                        console.log("element", element);
                        console.log("binding", binding);
                        element.value = binding.value
                    }
                }

            },
            // 2秒后修改num的值,使其重新渲染
            mounted() {
                setTimeout(_ => {
                    app.num = 3
                    app.num2 = "嘻嘻"
                }, 2000)
            },
        })
    </script>
</body>

</html>

开始的页面效果

2秒后的页面效果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值