vue自定义指令

143 阅读1分钟

vue分为自定义指令和内置指令

内置指令

  • v-for 用于遍历
  • v-if & v-show 用于隐藏和显示元素(区别在于后者是修改 display:block|none,前者是不创建把元素从dom中删除或者创建.
  • v-bind: 属性绑定,把数据绑定在HTML元素的属性上.
  • v-html & v-text 把数据绑定在HTML元素的属性上,作用同 innerHTML & innerText
  • v-on: 绑定HTML元素事件
  • v-if & v-else-if & v-else 条件渲染
  • v-model 绑定表单元素,实现双向绑定.

等等一些...

自定义指令

自定义指令分为全局和局部的两种

下面用两个案例来演示

全局:一个简单的拖拽小案例

< body> < div id="app">

    < p v-drag>< /p>

< /div>

< /body>

< script type="text/javascript">

Vue.directive('drag',function(el){
	el.onmousedown = function(e){
		var px = e.clientX - el.offsetLeft
		var py = e.clientY - el.offsetTop
		document.onmousemove = function(e){
			var l = e.clientX - px;
			var t = e.clientY - py;
			el.style.left=l+'px';
			el.style.top=t+'px';
		}
		document.onmouseup = function(e){
		    document.onmousemove = null;
		}
	}
})

< /script>

局部:一个简单的变换背景颜色

< body> < div id="app">

    < p v-color>< /p>

< /div>

< /body>

< script> new Vue({

    el:'#app',
    directives:{
        color:{
            // 指令的定义
            inserted: function (el) {
                el.style.background = "rgb("+parseInt(Math.random()*256)+","+parseInt(Math.random()*256)+","+parseInt(Math.random()*256)+")"
            }
        }
    }
})

< /script>

自定义指令的钩子函数

  • bind(){} 当指令绑定到 HTML 元素上时触发.只调用一次.
  • inserted() 当绑定了指令的这个HTML元素插入到父元素上时触发(在这里父元素是 div#app).但不保证,父元素已经插入了 DOM 文档.
  • updated() 所在组件的VNode更新时调用.
  • componentUpdate 指令所在的组件的VNode以及其子VNode 全部更新后调用.
  • unbind: 指令和元素解绑的时候调用,只调用一次