Skip to main content

How to customize directives in Vue?

 Vue officially provides some commonly used instructions v-text, v-html, v-model, v-if, v-show, etc. In addition, Vue also allows developers to customize related instructions. It is divided into private custom directives and global custom directives. The difference between them is: in each vue component, private custom directives can be declared under the directives node, and private custom directives only take effect in this component; globally shared custom directives Defining a directive needs to be declared via Vue.directive().

Here's a practical example:

 <div id="app">
        <input type="text" v-bind:value="n">
        <br>
        focus:<input type="text" v-my-focus:value="n">
        N:<p v-text="n"></p>
        N:<p v-add="n"></p>
        <input type="text" v-add:value="n">
        <input type="text" v-add:value="n">
        <button @click="n++">click</button>
        <p>{{a}}</p>
    </div>

    <script>
     Vue.config.productionTip=false;
     //
     Vue.directive("my-focus", function(element,binding){
        element.focus();
    })
        var vm = new Vue({
            el: '#app',
            data: {
                n:10,
                a:undefined
            },
            methods: {},
            directives:{
                add(element,binding){
                    console.log(this);
                    console.log(element,binding);
                    // element.innerText=binding.value+100;
                    element.value=binding.value;
                }
                /* add:{
                    bind(element,binding){
                        console.log(this);
                    console.log(element,binding);
                    element.innerText=binding.value+100;
                    },
                    inserted(element,binding){
                        console.log(this);
                    console.log(element,binding);
                    element.innerText=binding.value+100;
                    },
                    update(element,binding){
                        console.log(this);
                    console.log(element,binding);
                    element.innerText=binding.value+100;
                    }
                } */
            }
        });
    </script>
Summary: 

  • bind: will only be called once, which means that it will be called when the instruction is bound to the element for the first time;
  • update: When the page data is updated, this function will be triggered; 
  • inserted: Called when the element where the instruction is located is inserted into the page.

Comments

Popular posts from this blog

Destructuring assignment in ES6

 In the past, when we wanted to assign a value to a variable, such as an array type and an object type, to assign a value to a variable, we could only specify the value directly. It is very troublesome to write in this way, but under the ES6 syntax specification, it is allowed to directly extract the required values from arrays and objects according to a certain pattern, and directly assign variables to variables. This method is called Destructuring, which is simple to understand. That is, the left and right sides of the equal sign are equal.

Using ref to bind elements in Vue

 Vue provides us with a property to manipulate dom, ref. When bound to the dom element, it is used similar to the id. It is called through this.$refs, and it can also be bound to the component. It is very troublesome to obtain DOM elements in the previous native way. It needs to be obtained with such a long AP as: documentgetElementXXX/querySXXX.... Then jQuery was born to solve this pain point. The use of $("id") makes Our operation has become easier. But there are other problems, jQuery is just a library (plug-in) and cannot be used to build a framework. Now Vue can help us solve this problem. Vue also has its own method to obtain DOM, which is ref. It can get not only DOM elements but also components. If you add ref to the dom element, you can get the dom element, and if you add it to the component, you can get the component instance, and you can use the component method.

mapState, mapGetters, mapMutations, mapActions in vuex

 The above four objects are all in the vuex plug-in store, which is often used to store some data shared globally. But I still feel a little uncomfortable when using it, that is, I wrote a lot of repeated prefixes. At this time, these four objects appeared, which solved this pain point very well. mapState is mainly used to manipulate and obtain data, mapGetters is equivalent to computed properties, and mapMutations and mapActions are simplifications of mutation and action. They can be written as both objects and arrays.