zoukankan      html  css  js  c++  java
  • 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>
    
    作者:蓝月

    -------------------------------------------

    个性签名:能我之人何其多,戒骄戒躁,脚踏实地地走好每一步

  • 相关阅读:
    数据结构与算法(4)——python内置数据类型性能
    数据结构与算法(3)——变位词判断问题
    数据结构与算法(2)——算法复杂度O
    数据结构与算法(1)——图灵机计算模型
    R = [obj for obj in recs[imagename] if obj['name'] == classname] KeyError: '007765'
    关于windows下的libtorch配置
    09异常处理
    08多态与异常
    java07接口与继承动手动脑
    java06作业归档
  • 原文地址:https://www.cnblogs.com/viplanyue/p/13573734.html
Copyright © 2011-2022 走看看