Web全栈探索,Vue基础系列,常用特性(二)自定义指令

自定义指令的语法规则(获取元素焦点)

Vue.directive('自定义指令名称' {
    inserted: function(el) {
        el.自定义指令名称();
    }
})

自定义指令用法

<input type="text" v-自定义指令名称>

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div id="app">
    <input type="text" v-focus aria-label="输入框">
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
    /*
      自定义指令
    */
    Vue.directive('focus', {
        inserted: function(el){
            // el表示指令所绑定的元素
            el.focus();
        }
    });
    let vm = new Vue({
        el: '#app',
        data: {

        },
        methods: {
            handle: function(){
            }
        }
    });
</script>
</body>
</html>

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置

  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)

  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)

  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用

  • unbind:只调用一次,指令与元素解绑时调用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div id="app">
    <!--自定义指令名称不要写成驼峰式
    等号左边是指令名,等号右边是指令参数
    -->
    <input aria-label="" type="text" v-self_color='this.msg' >
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
    /*
      自定义指令-带参数
    */
    Vue.directive('self_color', {
        // el 代表被指令修饰的元素本省
        // 通过 binging.value 可以得到传入的参数值
        bind: function(el, binding){
            // 根据指令的参数设置背景色
            el.style.backgroundColor = binding.value.color;
        }
    });
    let vm = new Vue({
        el: '#app',
        data: {
            msg: {
                color: 'blue'
            }
        },
        methods: {
            handle: function(){

            }
        }
    });
</script>
</body>
</html>

局部指令

在 vue 实例中新定义一个属性 directives

directives: {
    自定义指令名称: {
        // 指令的定义
        inserted: function (el) {
            el.自定义指令名称()
        }
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div id="app">
    <!--自定义指令名称不要写成驼峰式
    等号左边是指令名,等号右边是指令参数
    -->
    <input aria-label="" type="text" v-self_color='this.msg' >
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">

    let vm = new Vue({
        el: '#app',
        data: {
            msg: {
                color: 'blue'
            }
        },
        methods: {
            handle: function(){
            }
        },

        /*
            自定义局部指令
        */
        directives:{
            self_color:{
                bind: function (el, binding) {
                    el.style.backgroundColor = binding.value.color;
                }
            }
        }
    });
</script>
</body>
</html>

 

posted @ 2020-07-18 16:12  IT蓝月  阅读(96)  评论(0编辑  收藏  举报
Live2D