您好,登錄后才能下訂單哦!
這篇文章主要介紹“vue在標(biāo)簽中怎么使用自定義屬性并獲取”,在日常操作中,相信很多人在vue在標(biāo)簽中怎么使用自定義屬性并獲取問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”vue在標(biāo)簽中怎么使用自定義屬性并獲取”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
我們在vue中有時候?yàn)榻o標(biāo)簽加一些特有的屬性, 當(dāng)我們在標(biāo)簽上觸發(fā)了事件之后, 就可以在 event 對象上面獲取
<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ā)了這個事件, 要在事件中得到 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 這個的已經(jīng)過時了, 并且得不到想要的值, 上面兩種方式就可以解決
兩種方法的區(qū)別在于, 方法二更為通用一些,只要是標(biāo)簽上的屬性, 不管是不是以“data-” 開頭的都可以獲取到, 而方法一, 只有在屬性是以 “data-” 開頭的才可以接收到
v-on、v-bind、v-once等都是Vue內(nèi)置指令,拿來就能用。
但他們的功能有時不能滿足我們。
這時我們就需要自定義一個指令,就像自定義一個函數(shù)一樣,完成我們想要做的事情。
模擬兩個需求,通過案例,對自定義指令的語法進(jìn)行了解
需求1:
定義一個v-big指令,和v-text功能類似,但會把綁定的數(shù)值放大10倍。
需求2:
定義一個v-fbind指令,和v-bind功能類似,但可以讓其所綁定的input元素默認(rèn)獲取焦點(diǎn)。
<div id="root"> <h3>{{name}}</h3> <h3>當(dāng)前的n值是:<span v-text="n"></span> </h3> <!-- <h3>放大10倍后的n值是:<span v-big-number="n"></span> </h3> --> <h3>放大10倍后的n值是:<span v-big="n"></span> </h3> <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ù)。
可以見得,配置對象中與有兩個傳參,element與binding,他們分別代表著,其所綁定的標(biāo)簽,與其綁定的屬性。
directives:{ big(element,binding){ console.log(element) console.log(binding) }, //......
配置對象中,有三個固定函數(shù),它們分別是bind、inserted、update
fbind:{ //指令與元素成功綁定時(一上來) bind(element,binding){ element.value = binding.value }, //指令所在元素被插入頁面時 inserted(element,binding){ element.focus() }, //指令所在的模板被重新解析時 update(element,binding){ element.value = binding.value } }
正如注釋所寫,bind是當(dāng)指令與元素成功綁定,也就是也面被解構(gòu)后,就會執(zhí)行。
inserted
是當(dāng)所綁定元素在頁面存在時,執(zhí)行
update
是當(dāng)模板被重新解構(gòu)時,執(zhí)行
如果想全局配置一個自定義指令,多個Vue實(shí)例都能調(diào)用,其寫法與過濾器的全局配置類似
語法:
Vue.directive(指令名,配置對象) 或 Vue.directive(指令名,回調(diào)函數(shù))
//定義全局指令 Vue.directive('fbind',{ bind(element,binding){ element.value = binding.value }, }
文章到這里就結(jié)束了
最后,放上全部筆記
<body> <!-- 需求1:定義一個v-big指令,和v-text功能類似,但會把綁定的數(shù)值放大10倍。 需求2:定義一個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個回調(diào): (1).bind:指令與元素成功綁定時調(diào)用。 (2).inserted:指令所在元素被插入頁面時調(diào)用。 (3).update:指令所在模板結(jié)構(gòu)被重新解析時調(diào)用。 三、備注: 1.指令定義時不加v-,但使用時要加v-; 2.指令名如果是多個單詞,要使用kebab-case命名方式,不要用camelCase命名。 --> <!-- 準(zhǔn)備好一個容器--> <div id="root"> <h3>{{name}}</h3> <h3>當(dāng)前的n值是:<span v-text="n"></span> </h3> <!-- <h3>放大10倍后的n值是:<span v-big-number="n"></span> </h3> --> <h3>放大10倍后的n值是:<span v-big="n"></span> </h3> <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',{ //指令與元素成功綁定時(一上來) 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函數(shù)何時會被調(diào)用?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>
到此,關(guān)于“vue在標(biāo)簽中怎么使用自定義屬性并獲取”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。