溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

兄弟組件之間聯(lián)動--vue開發(fā)app點(diǎn)擊字母展示地區(qū)列表

發(fā)布時間:2020-04-09 12:48:05 來源:網(wǎng)絡(luò) 閱讀:413 作者:凱哥Java 欄目:移動開發(fā)

兄弟組件之間聯(lián)動--vue開發(fā)app點(diǎn)擊字母展示地區(qū)列表


下圖這種地區(qū)搜索方式在很多app中都很常見,今天就使用vue框架中的 better-scroll 第三方包來實(shí)現(xiàn)頁面滾動和點(diǎn)擊側(cè)邊欄字母該字母開頭的地區(qū)列表置頂功能。

來源:凱哥Java(kaigejava)


兄弟組件之間聯(lián)動--vue開發(fā)app點(diǎn)擊字母展示地區(qū)列表


1、A子組件通過使用 this.$emit(事件名字,事件攜帶內(nèi)容) 向外觸發(fā)事件

首先,在<city-alphabet>組件每個字母元素上綁定事件,在該事件中向外觸發(fā)事件,并將值傳遞出去:

<template>

? ? <ul class="list">

? ? ? ? <li class="item"?

? ? ? ? v-for="(item,key) in city"?

? ? ? ? :key="key"

? ? ? ? @click="handleLetterClick"

? ? ? ? >

? ? ? ? {{ key }}

? ? ? ? </li>

? ? </ul>

</template>

methods:{

? ? handleLetterClick(e){

? ? ? ? this.$emit('change',e.target.innerText)

? ? }

}



2、父組件接收A組件傳過來的事件,并通過屬性來向B組件傳值

因?yàn)?lt;city-alphabet>組件傳遞過來的是單個字符串,所以,先在data中定義一個屬性letter來接收這個值;

聯(lián)系凱哥-》凱哥Java(kaigejava)

或凱哥個人博客:www.kaigejava.com

悄悄說下,凱哥個人博客可以私信凱哥哦~

并在父組件模板中的<city-alphabet>組件中定義傳遞的方法@change="handleLetterChange"用來獲取傳遞的值;

將letter屬性傳遞給另一個子組件<city-list>;

<template>

? ? <div>

? ? ? ? <city-list?

? ? ? ? :city="cities"?

? ? ? ? :hot="hotCities"

? ? ? ? :letter="letter"

? ? ? ? ></city-list>

? ? ? ? <city-alphabet?

? ? ? ? :city="cities"

? ? ? ? @change="handleLetterChange"

? ? ? ? ></city-alphabet>

? ? </div>

</template>

data(){

? ? return{

? ? ? ? letter:''

? ? }

},

methods:{

? ? handleLetterChange(letter){

? ? ? ? this.letter = letter

? ? }

},

3、B組件接收父組件傳遞過來的屬性,并通過watch監(jiān)聽參數(shù)的變化,然后執(zhí)行頁面的滾動顯示


首先,給每個地址列表區(qū)域元素加 ref ,better-scroll會根據(jù)ref給指定區(qū)域進(jìn)行操作;

然后使用watch監(jiān)聽letter變化,并使用better-scroll中的scrollToElement接口執(zhí)行頁面滾動;

<div class="area"?

v-for="(item,key) in city"?

:key="key"

:ref="key"

>

? ? ...

</div>


props:{

? ? letter:String

},

watch:{

? ? letter(){

? ? ? ? if(this.letter){

? ? ? ? ? ? // scrollToElement里只接受單個DOM元素,不接收數(shù)組

? ? ? ? ? ? //因?yàn)樯厦娴膁iv元素是數(shù)組渲染出來的,所以這里this.$refs得到的是數(shù)組

? ? ? ? ? ? const element = this.$refs[this.letter][0]

? ? ? ? ? ? this.scroll.scrollToElement(element)

? ? ? ? }

? ? }

}







向AI問一下細(xì)節(jié)

免責(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)容。

AI