首页 > 其他分享 >VUE学习-自定义指令

VUE学习-自定义指令

时间:2022-08-15 10:11:50浏览次数:54  
标签:function el Vue directive 自定义 binding VUE 指令

自定义指令

有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。

<div id="directive-demo">
	<input v-focus />
</div>
  • 全局注册

    Vue.directive('focus', { 
    	/* 注册一个全局自定义指令 `v-focus` */
    	inserted: function (el) {
    		el.focus()
    	} 
    	/* 当被绑定的元素插入到 DOM 中时…… */
    })
    new Vue({el:'#directive-demo'})
    
  • 局部注册

    new Vue({
    	el:'#directive-demo',
    	directives: {
    		focus: {
    			inserted: function (el) {
    				el.focus()
    			}
    		}
    	}
    })
    

指令钩子函数

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  • unbind:只调用一次,指令与元素解绑时调用。

<!-- //bind(el[,binding[,vnode[,oldVnode]]]) -->
<!--
// el: 指令所绑定的元素,可以用来直接操作 DOM(读写)。
// binding: {name, value, oldValue, expression, arg, modifiers}
/**
** name: 指令名,不包括 v- 前缀。
** value: 指令的绑定值, 绑定值为表达式时显示结果。如果指令需要多个值,可以传入一个 JavaScript 对象字面 ****量。记住,指令函数能够接受所有合法的 JavaScript 表达式。
** oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。
** expression: 字符串形式的指令表达式,绑定值为表达式时显示表达式。
** arg: 传给指令的参数。形式:v-my-directive:foo。
** modifiers: 一个包含修饰符的对象。
**** 例如: v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
**/
// vnode: Vue 编译生成的虚拟节点。
//oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。-->

<div id="hook-args-demo" v-demo:foo.a.b="message"></div>
<script>
Vue.directive('demo', {
	bind: function (el, binding, vnode) {
		var s = JSON.stringify
		el.innerHTML = 'name: ' + s(binding.name) + '<br>' + 'value: ' + s(binding.value) + '<br>' + 'expression: ' + s(binding.expression) + '<br>' + 'argument: ' + s(binding.arg) + '<br>' + 'modifiers: ' + s(binding.modifiers) + '<br>' + 'vnode keys: ' + Object.keys(vnode).join(', ')
	}
})

new Vue({ 
	el: '#hook-args-demo',
	data: { message: 'hello!' }
})
</script>

image

函数简写

在很多时候,你可能想在 bind 和 update 时触发相同行为。

Vue.directive('color', function (el,binding) {
	el.style.backgroundColor = binding.value;
})

动态指令参数

指令的参数可以是动态的。例如,在 v-mydirective:[argument]="value" 中,argument 参数可以根据组件实例数据进行更新!

<div id="dynamicexample">
	<h3>Scroll down inside this section ↓</h3>
	<p v-pin:[direction]="200">I am pinned onto the page at 200px to the left</p>
</div>
<script>
Vue.directive('pin', {
	bind: function (el, binding, vnode) {
		el.style.position = 'fixed'
		el.style[binding.arg] = binding.value + 'px';
	}
})
new Vue({
	el: '#dynamicexample',
	data: function () {
		return {direction: 'left'}
	}
})
</script>

标签:function,el,Vue,directive,自定义,binding,VUE,指令
From: https://www.cnblogs.com/-LemonWater-/p/16587273.html

相关文章

  • vue源码解析
    先进行语义解析各种vue命令生成模板语法树,再根据模板语法树使用createRender函数(render函数可使用自己定义的)创建render函数,在创建的同时使用闭包(函数柯里化)将模板语法......
  • Vue2.x全家桶
    Vue2.x1、Vue简介1.1、官网英文官网:https://vuejs.org/中文官网:https://cn.vuejs.org/1.2、介绍与描述1、Vue是一套用来动态构建用户界面的渐进式JavaScript框架......
  • vue学习之------props验证
    1、props类型有哪些?2、为同一个属性,指定多个可能类型 ......
  • django中的自定义分页器
    1.什么是自定义分页器当我们需要在前端页面展示的数据太多的时候,我们总不能将数据展示在一页上面吧!这时,我们就需要自定义一个分页器,将数据分成特定的页数进行展示,每一页展......
  • 环境搭建: Vue3+Echarts5+vue-eharts + 移动端rem适配
    对于数据可视化的最后一站,就是移动数据报表的展示,毕竟手机端的适普性,便携性,灵活性更高.包括我自己也是更多在移动端进行轻量办公.而用主流的商业BI平台在PC端的......
  • Android自定义矩形View中任意拖动圆点获取色温值(RectangleWheel)
    如图所示:矩形色温条中,拖动圆点获取当前色温值  1、自定义属性res->values下创建attrs.xml文件<declare-styleablename="RectangleWheel"><!--矩形宽高......
  • Vue2.x+Node.js拼多多商城项目实战课程学习有感(附源码)
    本人计算机本科毕业,本来毕业后挺迷茫的,听学长们说现在前端比较吃香,想着自己自学前端去找工作,于是网上各种找学习课程或者购买一些学习资料在家自学,据学长们所说,能自学会的......
  • vue3 做keepalive需要注意的事项
    再vue2里面做可以这么写:<keep-alive><router-view></router-view></keep-alive>但是报一个警告:vue-router.mjs:35[VueRouterwarn]:<router-view>cann......
  • vue学习之------组件命名
    1、短横线命名法使用时必须严格按照短横线名称进行使用。 2、驼峰命名法使用时,可以转成短横线,也能直接使用驼峰命名 ......
  • App.vue里 引入样式报错
    使用@importurl();报错,格式没写对@importurl(common/common.css);自动tab生成,路径不正确/*@import'@/.common/common.css';*/正确格式@import'~@/xx......