vue在标签中如何使用(data-XXX)自定义属性并获取

目录
  • 在标签中使用(data-XXX)自定义属性并获取
    • 标签的写法
    • 方法一
    • 方法二
  • vue基础-自定义指令
    • 语法
    • 传参
    • 配置对象中常用的三个回调
    • 全局自定义指令

在标签中使用(data-XXX)自定义属性并获取

我们在vue中有时候为给标签加一些特有的属性, 当我们在标签上触发了事件之后, 就可以在 event 对象上面获取

标签的写法

<div class="menu-item" @click="clickMenu('参数一',$event)" :data-mytype="1">
  <van-image :src="aaa"></van-image>
  <span>{{ item.title }}</span>
</div>

上面的 @click 的函数中, 如果要传入事件参数, 必须使用 $event ,这是固写的,不能变

当我们触发了这个事件, 要在事件中得到 data-mytype的自定义属性, 有两种方法

方法一

methods:{
clickMenu(param1,event){
console.log(param1);//参数一
let mytype = event.currentTarget.dataset.mytype;
}
}

方法二

methods:{
clickMenu(param1,event){
console.log(param1);//参数一
let mytype = event.currentTarget.getAttribute("data-mytype");
}
}

网上有很多使用 event.srcElement 这个的已经过时了, 并且得不到想要的值, 上面两种方式就可以解决

两种方法的区别在于, 方法二更为通用一些,只要是标签上的属性, 不管是不是以“data-” 开头的都可以获取到, 而方法一, 只有在属性是以 “data-” 开头的才可以接收到

vue基础-自定义指令

v-on、v-bind、v-once等都是Vue内置指令,拿来就能用。

但他们的功能有时不能满足我们。

这时我们就需要自定义一个指令,就像自定义一个函数一样,完成我们想要做的事情。

模拟两个需求,通过案例,对自定义指令的语法进行了解

需求1:

  • 定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。

需求2:

  • 定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。

语法

<div id="root">
	<h2>{{name}}</h2>
	<h2>当前的n值是:<span v-text="n"></span> </h2>
	<!-- <h2>放大10倍后的n值是:<span v-big-number="n"></span> </h2> -->
	<h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
	<button @click="n++">点我n+1</button>
	<hr/>
	<input type="text" v-fbind:value="n">
</div>

自定义指令的语法,也和内置指令一样,   v-xxx = "a"  或 v-xxx:a,    xxx为自定义指令的名字,a为绑定的属性.

当自定义指令创建完,我们看一下Vue实例里的语法该怎么写

new Vue({
	el:'#root',
	data:{
		name:'尚硅谷',
		n:1
	},
	directives:{
        big(element,binding){
			console.log('big',this)
			element.innerText = binding.value * 10
		},
		fbind:{
			bind(element,binding){
				element.value = binding.value
			},
			inserted(element,binding){
			    element.focus()
			},
			update(element,binding){
				element.value = binding.value
			}
		}
	}
})

自定义指令被当作配置对象写入directives对象中,其执行的方式写成回调函数。

传参

可以见得,配置对象中与有两个传参,element与binding,他们分别代表着,其所绑定的标签,与其绑定的属性。

directives:{
	big(element,binding){
		console.log(element)
		console.log(binding)
    },
//......

配置对象中常用的三个回调

配置对象中,有三个固定函数,它们分别是bind、inserted、update

fbind:{
	//指令与元素成功绑定时(一上来)
	bind(element,binding){
		element.value = binding.value
	},
	//指令所在元素被插入页面时
	inserted(element,binding){
			element.focus()
	},
	//指令所在的模板被重新解析时
	update(element,binding){
		element.value = binding.value
	}
}

正如注释所写,bind是当指令与元素成功绑定,也就是也面被解构后,就会执行。

  • inserted是当所绑定元素在页面存在时,执行
  • update是当模板被重新解构时,执行

全局自定义指令

如果想全局配置一个自定义指令,多个Vue实例都能调用,其写法与过滤器的全局配置类似

语法:

Vue.directive(指令名,配置对象) 或   Vue.directive(指令名,回调函数)

//定义全局指令
Vue.directive('fbind',{
    bind(element,binding){
		element.value = binding.value
	},
}

文章到这里就结束了

最后,放上全部笔记

<body>
		<!--
				需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。
				需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。
				自定义指令总结:
						一、定义语法:
									(1).局部指令:
												new Vue({															new Vue({
													directives:{指令名:配置对象}   或   		directives{指令名:回调函数}
												}) 																		})
									(2).全局指令:
													Vue.directive(指令名,配置对象) 或   Vue.directive(指令名,回调函数)

						二、配置对象中常用的3个回调:
									(1).bind:指令与元素成功绑定时调用。
									(2).inserted:指令所在元素被插入页面时调用。
									(3).update:指令所在模板结构被重新解析时调用。

						三、备注:
									1.指令定义时不加v-,但使用时要加v-;
									2.指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名。
		-->
		<!-- 准备好一个容器-->
		<div id="root">
			<h2>{{name}}</h2>
			<h2>当前的n值是:<span v-text="n"></span> </h2>
			<!-- <h2>放大10倍后的n值是:<span v-big-number="n"></span> </h2> -->
			<h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
			<button @click="n++">点我n+1</button>
			<hr/>
			<input type="text" v-fbind:value="n">
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false

		//定义全局指令
		/* Vue.directive('fbind',{
			//指令与元素成功绑定时(一上来)
			bind(element,binding){
				element.value = binding.value
			},
			//指令所在元素被插入页面时
			inserted(element,binding){
				element.focus()
			},
			//指令所在的模板被重新解析时
			update(element,binding){
				element.value = binding.value
			}
		}) */

		new Vue({
			el:'#root',
			data:{
				name:'尚硅谷',
				n:1
			},
			directives:{
				//big函数何时会被调用?1.指令与元素成功绑定时(一上来)。2.指令所在的模板被重新解析时。
				/* 'big-number'(element,binding){
					// console.log('big')
					element.innerText = binding.value * 10
				}, */
				big(element,binding){
					console.log('big',this) //注意此处的this是window
					// console.log('big')
					element.innerText = binding.value * 10
				},
				fbind:{
					//指令与元素成功绑定时(一上来)
					bind(element,binding){
						element.value = binding.value
					},
					//指令所在元素被插入页面时
					inserted(element,binding){
						element.focus()
					},
					//指令所在的模板被重新解析时
					update(element,binding){
						element.value = binding.value
					}
				}
			}
		})

	</script>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue 出现data-v-xxx的原因及解决

    现象: 在Vue开发中,会遇到html被浏览器解析后,在标签中出现'data-v-xxxxx'标记,如下: <div data-v-fcba8876 class="xxx"> aaa</div> 原因: 来看官方解释: <style scoped> @media (min-width: 250px) { .list-container:hover { background: orange; } } </style> The optiona

  • vue 获取元素额外生成的data-v-xxx操作

    需求描述:由于样式中使用了scoped,所以编译后标签对中生成data-v-xxx属性.在[.dialog_content]的div中 动态添加元素节点p和span时,也需要给元素节点添加data-v-xxx属性.由于data-v-xxx属性是会变化的,那如何获取它,添加在动态添加的元素节点中呢?本博客将给出解决方案. [解决方法] 获取属性名[document.getElementById("dialog_submit").attributes[0].name] 设置属性[nodeP

  • 详解Vue自定义指令及使用

    一.什么是指令 学习 vue 的时候肯定会接触指令,那么什么是指令呢? 在 vue 中提供了一些对于页面和数据更为方便的输出,这些操作就叫做指令,以 v-xxx 表示,比如 html 页面中的属性 <div v-xxx ></div> 比如在 angular 中 以 ng-xxx 开头的就叫做指令 指令中封装了一些 DOM 行为,结合属性作为一个暗号,暗号有对应的值,根据不同的值,会进行相关 DOM 操作的绑定,即可以进行一些模板的操作 vue 中常用的一些内置 v- 指令 v-t

  • vue在标签中如何使用(data-XXX)自定义属性并获取

    目录 在标签中使用(data-XXX)自定义属性并获取 标签的写法 方法一 方法二 vue基础-自定义指令 语法 传参 配置对象中常用的三个回调 全局自定义指令 在标签中使用(data-XXX)自定义属性并获取 我们在vue中有时候为给标签加一些特有的属性, 当我们在标签上触发了事件之后, 就可以在 event 对象上面获取 标签的写法 <div class="menu-item" @click="clickMenu('参数一',$event)" :data-

  • Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题

    Vue.js可以很方便的实现数据双向绑定,所以在处理表单,人机交互方面具有很大的优势.下面给大家介绍Vue.js表单标签中的单选按钮.复选按钮和下拉列表的取值问题. 摘要: 表单标签取值问题中,单选按钮.复选按钮和下拉列表都比较特殊.这里总结一下vue.js中关于单选按钮.复选按钮和下拉列表不同情况的取值特殊性问题. 表单标签取值问题中,单选按钮.复选按钮和下拉列表都比较特殊.这里总结一下vue.js中关于单选按钮.复选按钮和下拉列表不同情况的取值特殊性问题. 一.单选按钮 单选按钮:单选按钮用

  • Vue.js项目中管理每个页面的头部标签的两种方法

    在 Vue SPA 应用中,如果想要修改 HTML 的头部标签,如页面的 title ,我们只能去修改 index.html 模板文件,但是这个是全局的修改,如何为每个页面都设置不一样的 title 呢?下面介绍两种方法. 使用router.meta 在路由里面配置每个路由的地址: routes: [ { /* (首页)默认路由地址 */ path: '/', name: 'Entrance', component: Entrance, meta: { title: '首页入口' } }, {

  • 详解Vue的组件中data选项为什么必须是函数

    官方解释 data 必须是函数 构造 Vue 实例时传入的各种选项大多数都可以在组件里使用.只有一个例外:data 必须是函数.实际上,如果你这么做: Vue.component('my-component', { template: '<span>{{ message }}</span>', data: { message: 'hello' } }) 那么 Vue 会停止运行,并在控制台发出警告,告诉你在组件实例中 data 必须是一个函数.但理解这种规则为何存在也是很有益处的,

  • Vue中el-form标签中的自定义el-select下拉框标签功能

    页面写死el-select下拉框标签: 通过v-for="item in stateArr"绑定,stateArr声明在Vue组件里面的data参数里面代码如下: 到此这篇关于Vue中el-form标签中的自定义el-select下拉框标签功能的文章就介绍到这了,更多相关Vue el-form标签 自定义el-select下拉框标签内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • vue实现修改标签中的内容:id class style

    目录 vue修改标签的内容:id class style v-bind,v-model注意 动态改变class和style的一些方法 使用$event 下面的函数处理 vue修改标签的内容:id class style v-bind,v-model注意 v-bind动态绑定指令,默认情况下标签自带属性的值是固定的,在为了能够动态的给这些属性添加值,可以使用v-bind:你要动态变化的值=“表达式” v-bind用于绑定属性和数据 ,其缩写为“ : ” 也就是v-bind:id === :id v

  • vue在html标签{{}}中调用函数的方法总结及对比

    目录 一.问题 1)实现上述需求:有两种方式 2)两种实现方式对比: 二.解决方法(在html渲染时调用函数) 1.定义处理函数 2.引入处理函数,在data中定义函数,在html中使用 3.效果 4.优化 三.总结 一.问题 1.在html中对数据中的某一个标签是根据标签的类型书写的,值写在了{{}}中,希望显示的时候对值做某种细节处理. 例如:我的需求:后端返回姓名.年龄.出生日期.学历等组成的一个数组,出生日期要保存为带有时分秒的,但是显示时不需要时分秒. 1)实现上述需求:有两种方式 a

  • 在Vue mounted方法中使用data变量详解

    如下所示: data: { certificates: null }, mounted: function () { var __this = this; __this.certificates = getDictForkey("学历"); } 使用this对data中变量进行调用 vue生命周期参照官方:点击进入 vue渲染页面的时候,可能会对某些数据进行字典操作,比方性别,数据中是0和1,字典值是男和女,这个时候就需要在mounted进行"性别"字典的获取,然后

  • vue 清空input标签 中file的值操作

    template中: <input type="file" ref="pathClear" @change="onUpload" name="file" id="file"> methods中: onUpload(){ this.$refs. pathClear.value ='' }, 补充知识:将input file的选择的文件清空的两种解决方案 上传文件时,选择了文件后想清空文件路径,搜索

  • 基于Vue中this.$options.data()的this指向问题

    目录 this.$options.data()的this指向问题 vue文档中有关于data的指向问题的解释 vue骚操作之this.$options.data() 重置vue组件的data数据 小结一下 this.$options.data()的this指向问题 项目里遇到一个问题,用this.$options.data()重置组件data时报错,原因是因为form里的rule规则采用了this写法. 如下: rules: {         code: [this.$rules.requir

随机推荐