Web

Vue-自定义指令(属性指令和元素指令)

2019-05-17  本文已影响0人  瑟闻风倾

1. 自定义指令属性指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script type="text/javascript" src="../vue1026.js"></script>
</head>
<body>
    <div id="app">
        <input type="text" v-focus v-color="keyColor" placeholder="请输入名称关键字进行搜索" v-model="keyName">
    </div>
</body>
<script type="text/javascript">

    /*1.在Vue1.0中提供了一个接口Vue.directive(自定义指令名称,回调函数)来自定义属性指令。在定义属性指令名称时不需加v-前缀,但是在使用时需要加v-前缀。*/
    //eg1:自定义一个v-focus的指令(只有指令名称):实现当前使用v-focus指令的文本框自动获取焦点(未实现)
    Vue.directive("focus",function(){
        console.log("搜索框获取焦点");
        //(1)获取当前使用了v-focus指令的dom对象
        var inputObj = this.el;//this为当前自定义的指令对象
        console.log(inputObj);
        //(2)dom对象获取焦点
        inputObj.focus();
    });
    //eg2:自定义一个v-color的指令(不仅有指令名称还有表达式构成的指令):实现当前使用v-color指令的元素的文本颜色和data中定义好的颜色值一致
    Vue.directive("color",function(){
        //(1)获取当前使用了v-focus指令的dom对象
        var inputObj = this.el;//this为当前自定义的指令对象
        //(2)获取v-color="keyColor"中keyColor变量的值,并赋值给dom对象的文本颜色
        //说明:this.vm.keyColor虽能直接获取变量keyColor的值,但当data中变量名keyColor被修改指令函数中也需对应进行修改,且无法解决多处用到v-color指令且颜色值不同的情况
        //console.log(this.vm.keyColor);
        console.log(this.expression);//获取当前指令的值keyColor(keyColor是data中的一个变量名)
        inputObj.style.color = this.vm[this.expression];//vm为使用了当前指令的元素所在区域的调度者VM
    });
    //注意:自定义属性指令Vue.directive(自定义指令名称,回调函数)其实是Vue.directive(自定义指令名称,对象)的简略写法;
    //     自定义元素指令只能通过Vue.elementDirective(自定义指令名称,对象)来定义
    //eg3:自定义一个v-color的指令的简略写法
    /*Vue.directive("color",{
        bind:function(){
        this.el.style.color = this.vm[this.expression];
    }
    });*/

    var vm = new Vue({
        el:"#app",
        data:{
            keyName:"",
            keyColor:"blue"
        }
    });
</script>
</html>

2. 自定义元素(标签)指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script type="text/javascript" src="vue1026.js"></script>
</head>
<body>
    <div id="app">
        <my-green>搜索条件:</my-green><input type="text" placeholder="请输入名称关键字进行搜索" v-model="keyName">
    </div>
</body>
<script type="text/javascript">

    /*2.在Vue1.0中提供了一个接口Vue.elementDirective(自定义指令名称,对象)来自定义元素(标签)指令。在定义元素指令名称时可以加v-前缀,使用时和名称保持一致。*/
    //eg1:定义一个元素指令my-green:实现被元素包裹的内容文字颜色为绿色
    Vue.elementDirective("my-green",{
        bind:function(){
            this.el.style.color = "green";
        }
    })
    

    var vm = new Vue({
        el:"#app",
        data:{      
            keyName:""
        }
    });
</script>
</html>
上一篇 下一篇

猜你喜欢

热点阅读