美文网首页
Vue 中自定义指令

Vue 中自定义指令

作者: ER_PM | 来源:发表于2019-10-10 15:14 被阅读0次

    注意!示例使用 CLL 3+创建

    在 Vue 中内置了很多方便的指令来操作 html,比如 v-modelv-forv-if 等。

    同时 Vue 给我们提供了自定义指令的接口,让我们灵活的根据自身需要,自定义指令来便捷高效的直接操作 dom

    如何自定义指令?

    注册自定义指令有两种方式,分别是全局(可以在任意组件中使用)和组件中(仅在组件中使用)。

    全局注册

    Vue.directive('指令名称',{钩子函数})

    在 new Vue 前注册,下面代码注册了 flash 的全局指令,它让元素每隔 200 毫秒显示和隐藏,类似王者荣耀中闪现的技能效果。

    渲染图
    import Vue from 'vue'
    import App from './App.vue'
    
    Vue.config.productionTip = false
    
    // v-flash
    Vue.directive('flash', {
      // bind钩子,指令被绑定到元素时调用,只调用一次。
      // el,该指令所绑定的元素,用来直接操作 DOM 。
      bind: function(el) {
        let isVisible = 'visible'
        setInterval(() => {
          el.style.visibility = isVisible
          isVisible = isVisible == 'hidden' ? 'visible' : 'hidden'
        }, 200)
      }
    })
    
    new Vue({
      render: h => h(App)
    }).$mount('#app')
    

    应用

    给元素应用自定义指令时需要加上 v-前缀

    <!-- App.vue -->
    <template>
      <div id="app">
        <h1 v-flash>一闪一闪,亮晶晶</h1>
      </div>
    </template>
    
    <script>
      export default {}
    </script>
    

    这样 h1元素就出现一闪一闪的效果了。

    组件中(局部)注册

    同理,组件中注册,在 directives 对象里添加 flash 自定义指令即可。

    <template>
      <div id="app">
        <h1 v-flash>一闪一闪,亮晶晶</h1>
      </div>
    </template>
    
    <script>
      export default {
        // 组件中组成自定义指令
        directives: {
          flash: {
            bind: function(el) {
              let isVisible = 'visible'
              setInterval(() => {
                el.style.visibility = isVisible
                isVisible = isVisible == 'hidden' ? 'visible' : 'hidden'
              }, 200)
            }
          }
        }
      }
    </script>
    

    总结

    介绍了自定义全局指令和局部指令,以及如何应用,望你使用愉快。

    相关文章

      网友评论

          本文标题:Vue 中自定义指令

          本文链接:https://www.haomeiwen.com/subject/feqapctx.html