vue在標(biāo)簽中如何使用(data-XXX)自定義屬性并獲取
在標(biāo)簽中使用(data-XXX)自定義屬性并獲取
我們在vue中有時(shí)候?yàn)榻o標(biāo)簽加一些特有的屬性, 當(dāng)我們在標(biāo)簽上觸發(fā)了事件之后, 就可以在 event 對象上面獲取
標(biāo)簽的寫法
<div class="menu-item" @click="clickMenu('參數(shù)一',$event)" :data-mytype="1">
? <van-image :src="aaa"></van-image>
? <span>{{ item.title }}</span>
</div>上面的 @click 的函數(shù)中, 如果要傳入事件參數(shù), 必須使用 $event ,這是固寫的,不能變
當(dāng)我們觸發(fā)了這個(gè)事件, 要在事件中得到 data-mytype的自定義屬性, 有兩種方法
方法一
methods:{
clickMenu(param1,event){
console.log(param1);//參數(shù)一
let mytype = event.currentTarget.dataset.mytype;
}
}方法二
methods:{
clickMenu(param1,event){
console.log(param1);//參數(shù)一
let mytype = event.currentTarget.getAttribute("data-mytype");
}
}網(wǎng)上有很多使用 event.srcElement 這個(gè)的已經(jīng)過時(shí)了, 并且得不到想要的值, 上面兩種方式就可以解決
兩種方法的區(qū)別在于, 方法二更為通用一些,只要是標(biāo)簽上的屬性, 不管是不是以“data-” 開頭的都可以獲取到, 而方法一, 只有在屬性是以 “data-” 開頭的才可以接收到
vue基礎(chǔ)-自定義指令
v-on、v-bind、v-once等都是Vue內(nèi)置指令,拿來就能用。
但他們的功能有時(shí)不能滿足我們。
這時(shí)我們就需要自定義一個(gè)指令,就像自定義一個(gè)函數(shù)一樣,完成我們想要做的事情。
模擬兩個(gè)需求,通過案例,對自定義指令的語法進(jìn)行了解
需求1:
- 定義一個(gè)v-big指令,和v-text功能類似,但會(huì)把綁定的數(shù)值放大10倍。
需求2:
- 定義一個(gè)v-fbind指令,和v-bind功能類似,但可以讓其所綁定的input元素默認(rèn)獲取焦點(diǎn)。
語法
<div id="root">
<h2>{{name}}</h2>
<h2>當(dāng)前的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++">點(diǎn)我n+1</button>
<hr/>
<input type="text" v-fbind:value="n">
</div>自定義指令的語法,也和內(nèi)置指令一樣, v-xxx = "a" 或 v-xxx:a, xxx為自定義指令的名字,a為綁定的屬性.

當(dāng)自定義指令創(chuàng)建完,我們看一下Vue實(shí)例里的語法該怎么寫
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
}
}
}
})自定義指令被當(dāng)作配置對象寫入directives對象中,其執(zhí)行的方式寫成回調(diào)函數(shù)。
傳參
可以見得,配置對象中與有兩個(gè)傳參,element與binding,他們分別代表著,其所綁定的標(biāo)簽,與其綁定的屬性。
directives:{
big(element,binding){
console.log(element)
console.log(binding)
},
//......
配置對象中常用的三個(gè)回調(diào)
配置對象中,有三個(gè)固定函數(shù),它們分別是bind、inserted、update
fbind:{
//指令與元素成功綁定時(shí)(一上來)
bind(element,binding){
element.value = binding.value
},
//指令所在元素被插入頁面時(shí)
inserted(element,binding){
element.focus()
},
//指令所在的模板被重新解析時(shí)
update(element,binding){
element.value = binding.value
}
}正如注釋所寫,bind是當(dāng)指令與元素成功綁定,也就是也面被解構(gòu)后,就會(huì)執(zhí)行。
inserted是當(dāng)所綁定元素在頁面存在時(shí),執(zhí)行update是當(dāng)模板被重新解構(gòu)時(shí),執(zhí)行
全局自定義指令
如果想全局配置一個(gè)自定義指令,多個(gè)Vue實(shí)例都能調(diào)用,其寫法與過濾器的全局配置類似
語法:
Vue.directive(指令名,配置對象) 或 Vue.directive(指令名,回調(diào)函數(shù))
//定義全局指令
Vue.directive('fbind',{
bind(element,binding){
element.value = binding.value
},
}文章到這里就結(jié)束了
最后,放上全部筆記
<body>
<!--
需求1:定義一個(gè)v-big指令,和v-text功能類似,但會(huì)把綁定的數(shù)值放大10倍。
需求2:定義一個(gè)v-fbind指令,和v-bind功能類似,但可以讓其所綁定的input元素默認(rèn)獲取焦點(diǎn)。
自定義指令總結(jié):
一、定義語法:
(1).局部指令:
new Vue({ new Vue({
directives:{指令名:配置對象} 或 directives{指令名:回調(diào)函數(shù)}
}) })
(2).全局指令:
Vue.directive(指令名,配置對象) 或 Vue.directive(指令名,回調(diào)函數(shù))
二、配置對象中常用的3個(gè)回調(diào):
(1).bind:指令與元素成功綁定時(shí)調(diào)用。
(2).inserted:指令所在元素被插入頁面時(shí)調(diào)用。
(3).update:指令所在模板結(jié)構(gòu)被重新解析時(shí)調(diào)用。
三、備注:
1.指令定義時(shí)不加v-,但使用時(shí)要加v-;
2.指令名如果是多個(gè)單詞,要使用kebab-case命名方式,不要用camelCase命名。
-->
<!-- 準(zhǔn)備好一個(gè)容器-->
<div id="root">
<h2>{{name}}</h2>
<h2>當(dāng)前的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++">點(diǎ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',{
//指令與元素成功綁定時(shí)(一上來)
bind(element,binding){
element.value = binding.value
},
//指令所在元素被插入頁面時(shí)
inserted(element,binding){
element.focus()
},
//指令所在的模板被重新解析時(shí)
update(element,binding){
element.value = binding.value
}
}) */
new Vue({
el:'#root',
data:{
name:'尚硅谷',
n:1
},
directives:{
//big函數(shù)何時(shí)會(huì)被調(diào)用?1.指令與元素成功綁定時(shí)(一上來)。2.指令所在的模板被重新解析時(shí)。
/* '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:{
//指令與元素成功綁定時(shí)(一上來)
bind(element,binding){
element.value = binding.value
},
//指令所在元素被插入頁面時(shí)
inserted(element,binding){
element.focus()
},
//指令所在的模板被重新解析時(shí)
update(element,binding){
element.value = binding.value
}
}
}
})
</script>以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue-router 切換組件頁面時(shí)進(jìn)入進(jìn)出動(dòng)畫方法
今天小編就為大家分享一篇Vue-router 切換組件頁面時(shí)進(jìn)入進(jìn)出動(dòng)畫方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
vue項(xiàng)目拍照或上傳圖片并實(shí)現(xiàn)轉(zhuǎn)化為base64格式
這篇文章主要介紹了vue項(xiàng)目拍照或上傳圖片并實(shí)現(xiàn)轉(zhuǎn)化為base64格式方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
Ant Design Vue Pro靜態(tài)路由如何改為動(dòng)態(tài)路由
這篇文章主要介紹了Ant Design Vue Pro靜態(tài)路由如何改為動(dòng)態(tài)路由問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
使用echarts點(diǎn)擊按鈕從新渲染圖表并更新數(shù)據(jù)
這篇文章主要介紹了使用echarts點(diǎn)擊按鈕從新渲染圖表并更新數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
100行代碼實(shí)現(xiàn)vue表單校驗(yàn)功能(小白自編)
這篇文章主要介紹了使用100行代碼實(shí)現(xiàn)vue表單校驗(yàn)功能,本文通過實(shí)例截圖給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
vue實(shí)現(xiàn)文字橫向無縫走馬燈組件效果的實(shí)例代碼
這篇文章主要介紹了vue 文字橫向無縫走馬燈組件的實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
vue打包并部署到nginx上的實(shí)現(xiàn)示例
本文主要介紹了vue打包并部署到nginx上的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01

