欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue.js踩坑之ref引用細(xì)節(jié)點(diǎn)講解

 更新時(shí)間:2022年03月31日 17:36:00   作者:草巾冒小子  
這篇文章主要介紹了vue.js踩坑之ref引用細(xì)節(jié)點(diǎn)講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

ref引用細(xì)節(jié)點(diǎn)講解

vue.js組件之H5頁(yè)面,DOM標(biāo)簽或者組件中,通過(guò)ref="自定義name名稱(chēng)"引用的細(xì)節(jié)點(diǎn)

要點(diǎn)簡(jiǎn)介:[ 見(jiàn)下文案例 ]

  • 使用is=" "解決H5出現(xiàn)的標(biāo)簽解析bug 。
  • 子組件中 使用data,data必須是 一個(gè) 函數(shù)!
  • DOM標(biāo)簽中,引用ref定義的name:獲得的是該DOM元素;如下文的: this.$refs.hello.innerHtml
  • 組件中,引用ref:獲得的是該DOM對(duì)象。如下文的: this.$refs.name2.number

vue不建議我們?cè)诖a里面操作DOM,但是,在處理一些極其復(fù)雜的動(dòng)畫(huà)效果,不操作DOM,單單靠vue的數(shù)據(jù)綁定是無(wú)法完成實(shí)際需求的效果的。這就需要我們必須操作DOM。如何操作呢?

通過(guò)ref引用的形式,來(lái)操作DOM

下面我們給一個(gè)需求:當(dāng)點(diǎn)擊div的時(shí)候,div里面的內(nèi)容被打印出來(lái)。

步驟如下

1.首先起一個(gè)引用的名字,比如hello:

ref='hello'

通過(guò)引用名稱(chēng)拿到該ref對(duì)應(yīng)DOM里面的內(nèi)容。

重要代碼如下

<body>
?? ?<div id="app">
?? ??? ?<div?
?? ??? ??? ?ref="hello"
?? ??? ??? ?@click="handleClick"
?? ??? ?>
?? ??? ??? ?hello , 通過(guò)ref命名引用 操作DOM元素 !
?? ??? ?</div>
?? ?</div>
?? ??? ?<script>
?? ??? ?var app = new Vue({
?? ??? ? ?el: '#app',
?? ??? ? ?methods: {
?? ??? ? ??? ?handleClick: function() {?? ??? ? ??? ??? ??? ??? ?alert(this.$refs.hello.innerHTML);
?? ??? ? ??? ?}
?? ??? ? ?}
?? ??? ?})
?? ?</script>
</body>

注意:this.$refs指頁(yè)面所有引用。

2.如果是引用組件呢?

我們先看一段代碼:

<body>
?? ?<div id="app">
?? ??? ?<counter></counter>
?? ??? ?<counter></counter>
?? ?</div>
?? ??? ?
?? ?<script>
?? ??? ?Vue.component('counter', {
?? ??? ??? ?template: '<button @click="handleClick">{{number}}</button>',
?? ??? ??? ?data: function() {
?? ??? ??? ??? ?return {
?? ??? ??? ??? ??? ?number: 0
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?methods: {
?? ??? ??? ? ??? ?handleClick: function() {?? ??? ? ??? ??? ??? ??? ??? ?
?? ??? ??? ? ??? ??? ?this.number ++;
?? ??? ??? ? ??? ?}
?? ??? ??? ?}
?? ??? ?})
?? ??? ?var app = new Vue({
?? ??? ? ?el: '#app',
?? ??? ?})
?? ?</script>
</body>

下面我們?cè)俳o一個(gè)需求:數(shù)字的求和運(yùn)算。

全部代碼如下:

<body>
?? ?<div id="app">
?? ??? ?<counter ref="name2" @change="handleChange"></counter>
?? ??? ?<counter ref="name3" @change="handleChange"></counter>
?? ??? ?<div>{{total}}</div>
?? ?</div>
?? ??? ?
?? ?<script>
?? ??? ?//子組件
?? ??? ?Vue.component('counter', {
?? ??? ??? ?template: '<button @click="handleClick">{{number}}</button>',
?? ??? ??? ?data: function() {
?? ??? ??? ??? ?return {
?? ??? ??? ??? ??? ?number: 0
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?methods: {
?? ??? ??? ? ??? ?handleClick: function() {?? ??? ? ??? ??? ??? ??? ??? ?
?? ??? ??? ? ??? ??? ?this.number ++;
?? ??? ??? ? ??? ??? ?this.$emit('change')//父組件中監(jiān)聽(tīng)變化
?? ??? ??? ? ??? ?}
?? ??? ??? ?}
?? ??? ?})
?? ??? ?
?? ??? ?//父組件
?? ??? ?var app = new Vue({
?? ??? ??? ?el: '#app',
?? ??? ??? ?data: {
?? ??? ??? ??? ?total: 0
?? ??? ??? ?},
?? ??? ??? ?methods: {
?? ??? ??? ??? ?handleChange: function() {?
?? ??? ??? ??? ??? ?console.log(this.$refs.name2.number);
?? ??? ??? ??? ??? ?console.log(this.$refs.name3.number);
?? ??? ??? ??? ??? ?this.total = this.$refs.name2.number + this.$refs.name3.number;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?})
?? ?</script>
</body>

注意:

this.$refs.name2是個(gè)對(duì)象!

這里使用了父子通信$emit(),不懂沒(méi)關(guān)系,可以翻典籍或查看對(duì)應(yīng)的講解博客。

ref引用及插槽

ref引用

ref被用來(lái)給元素或子組件注冊(cè)引用信息。引用信息將會(huì)注冊(cè)在父組件的$refs對(duì)象上。如果在普通的DOM元素上使用,引用指向的就是DOM元素;如果用在子組件上,引用就指向組件實(shí)例。(可用于訪問(wèn)子組件實(shí)例或子元素)

<p ref='p'>hello</p>
<child-component ref='child'></child-component>

當(dāng)v-for用于元素或組件的時(shí)候,引用的信息將是包含DOM節(jié)點(diǎn)或組件實(shí)例的數(shù)組。

注意:因?yàn)閞ef本身是作為渲染結(jié)果被創(chuàng)建的,在初始渲染的時(shí)候你還不能訪問(wèn)它們,因?yàn)樗鼈冞€不存在。 

ref引用DOM元素

引用ref引用頁(yè)面上的DOM元素:

在這里插入圖片描述

點(diǎn)擊按鈕后效果如圖:

在這里插入圖片描述

ref引用組件實(shí)例

要使用 ref 引用頁(yè)面上的組件實(shí)例:父組件訪問(wèn)子組件實(shí)例

RefCom1組件:

在這里插入圖片描述

子組件RefCom2:

在這里插入圖片描述

實(shí)現(xiàn)效果:

在這里插入圖片描述

實(shí)現(xiàn)標(biāo)簽的按需切換

通過(guò)布爾值 inputVisible 來(lái)控制組件中的文本框與按鈕的按需切換,希望文本框顯示出來(lái)后立即獲得焦點(diǎn)。

補(bǔ)充: this.$nextTick(cb)方法

組件的$nextTick(callback)方法,會(huì)把callback回調(diào)函數(shù)推遲到下一個(gè)DOM更新周期之后執(zhí)行。通俗講,就是等組件的DOM異步地重新渲染完成后,再執(zhí)行callback回調(diào)函數(shù),從而能保證callback回調(diào)函數(shù)可以操作到最新的DOM元素。

在這里插入圖片描述

在這里插入圖片描述

插槽

編譯作用域:父組件模板的所有東西都會(huì)在父級(jí)作用域內(nèi)編譯,子組件模板的所有東西都會(huì)在子級(jí)作用域內(nèi)編譯。

插槽(slot):是vue為組件的封裝者提供的能力。允許在封裝組件時(shí),把不確定的,希望由用戶(hù)指定的部分定義為插槽。插槽將父組件的內(nèi)容與子組件的模板相混合,從而彌補(bǔ)了視圖的不足。

如果父組件沒(méi)有插入內(nèi)容,那么slot的內(nèi)容就作為默認(rèn)出現(xiàn);若父組件插入了內(nèi)容,則slot的內(nèi)容將被插入的內(nèi)容替換掉。

匿名插槽

在封裝組件時(shí),可以通過(guò)<slot>元素定義插槽,從而為用戶(hù)與理由內(nèi)容占位符。匿名插槽(默認(rèn)插槽),有且只有一個(gè)。

例如:

子組件:

在這里插入圖片描述

父組件:

在這里插入圖片描述

補(bǔ)充:

(1)如果在封裝組件時(shí)沒(méi)有預(yù)留任何<slot>插槽,則用戶(hù)提供的內(nèi)容都會(huì)被丟棄。

(2)后備內(nèi)容:如果沒(méi)有為插槽提供內(nèi)容,那么后備內(nèi)容會(huì)生效。

在這里插入圖片描述

具名插槽

如果在封裝組件時(shí)需要預(yù)留多個(gè)插槽節(jié)點(diǎn),則需要為每個(gè) <slot> 插槽指定具體的 name 名稱(chēng)。這種帶有具體名稱(chēng)的插槽叫做“具名插槽”。

例如:

SlotSon組件:

在這里插入圖片描述

SlotFather組件:

在這里插入圖片描述

在這里插入圖片描述

作用域插槽

在封裝組件的過(guò)程中,可以為預(yù)留的<slot>插槽綁定props數(shù)據(jù),這種帶有props數(shù)據(jù)的<slot>叫做“作用域插槽”。

例如:

SlotSon2組件:(通過(guò)插槽給父組件傳遞數(shù)據(jù))

在這里插入圖片描述

SlotFather組件:接收插槽傳過(guò)來(lái)的數(shù)據(jù),賦給插槽內(nèi)容

在這里插入圖片描述

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中如何自定義右鍵菜單詳解

    vue中如何自定義右鍵菜單詳解

    這篇文章主要給大家介紹了關(guān)于vue中如何自定義右鍵菜單的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Vue項(xiàng)目中使用setTimeout存在的潛在問(wèn)題及解決

    Vue項(xiàng)目中使用setTimeout存在的潛在問(wèn)題及解決

    這篇文章主要介紹了Vue項(xiàng)目中使用setTimeout存在的潛在問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 詳解Vue中狀態(tài)管理Vuex

    詳解Vue中狀態(tài)管理Vuex

    vuex是一個(gè)專(zhuān)門(mén)為vue.js設(shè)計(jì)的狀態(tài)管理模式,并且也可以使用devtools進(jìn)行調(diào)試。
    2017-05-05
  • vue導(dǎo)出word純前端的實(shí)現(xiàn)方式

    vue導(dǎo)出word純前端的實(shí)現(xiàn)方式

    這篇文章主要介紹了vue導(dǎo)出word純前端的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 配置vue全局方法的兩種方式實(shí)例

    配置vue全局方法的兩種方式實(shí)例

    vue項(xiàng)目中有一些方法需要在多個(gè)頁(yè)面調(diào)用,但為了避免在每個(gè)頁(yè)面都import進(jìn)來(lái),可以把方法加到原型上去,這樣在每個(gè)組件中都能使用了,下面這篇文章主要給大家介紹了關(guān)于配置vue全局方法的兩種方式,需要的朋友可以參考下
    2021-09-09
  • vue-cli創(chuàng)建的項(xiàng)目中的gitHooks原理解析

    vue-cli創(chuàng)建的項(xiàng)目中的gitHooks原理解析

    這篇文章主要介紹了vue-cli創(chuàng)建的項(xiàng)目中的gitHooks原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • vue 中常見(jiàn)的時(shí)間格式轉(zhuǎn)換

    vue 中常見(jiàn)的時(shí)間格式轉(zhuǎn)換

    這篇文章主要介紹了vue 中常見(jiàn)的時(shí)間格式轉(zhuǎn)換,需要的朋友可以參考下
    2022-05-05
  • Vue的生命周期操作示例

    Vue的生命周期操作示例

    這篇文章主要介紹了Vue的生命周期操作,結(jié)合實(shí)例形式分析了vue生命周期中各個(gè)函數(shù)的運(yùn)行步驟,需要的朋友可以參考下
    2019-09-09
  • VUE多層路由嵌套實(shí)現(xiàn)代碼

    VUE多層路由嵌套實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了VUE多層路由嵌套的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Vue如何實(shí)現(xiàn)驗(yàn)證碼輸入交互

    Vue如何實(shí)現(xiàn)驗(yàn)證碼輸入交互

    這篇文章主要介紹了Vue實(shí)現(xiàn)驗(yàn)證碼輸入交互的示例,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論