アプリの多くの分野で一般的な検索方法以下の図は、ページのスクロールやトップ地域の機能のアルファベットサイドバーリスト内の文字の先頭を達成するために、より良い-スクロールサードパーティ製のパッケージの今日のVUEのフレームワークを使用します。
出典:凱歌のJava(kaigejava)
図1に示すように、外部このトリガ・イベントを使用することにより、サブアセンブリ。$エミット(イベント名、イベントがコンテンツを運びます)
まず、各文字のイベント、外側にイベントでトリガイベント要素アセンブリバインディング<都市・アルファベット>で値を渡します。
<テンプレート>
<ULクラス= "リスト">
<LIクラス= "項目"
V-のための= "(アイテム、キー)市の"
:キー=「キー」
@ = "handleLetterClick" をクリックしてください
>
{{キー}}
</ LI>
</ UL>
</テンプレート>
方法:{
handleLetterClick(E){
この。$( '変更'、e.target.innerText)を放出
}
}
図2に示すように、親コンポーネントは、伝送アセンブリに属性値を介して成分AとB上のイベント・パスを受信します
<都市のアルファベットは>コンポーネントは単一の文字列の上を通過しているので、そのため、データ値の属性が受信された文字を定義します。
連絡先凱歌 - 「凱歌の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监听参数的变化,然后执行页面的滚动显示
首先,给每个地址列表区域元素加 ref ,better-scroll会根据ref给指定区域进行操作;
然后使用watch监听letter变化,并使用better-scroll中的scrollToElement接口执行页面滚动;
<div class="area"
v-for="(item,key) in city"
:key="key"
:ref="key"
>
...
</div>
props:{
letter:String
},
watch:{
letter(){
if(this.letter){
// scrollToElement里只接受单个DOM元素,不接收数组
//因为上面的div元素是数组渲染出来的,所以这里this.$refs得到的是数组
const element = this.$refs[this.letter][0]
this.scroll.scrollToElement(element)
}
}
}