先進アプリ--vueリンケージは、兄弟コンポーネント間の領域のリストを表示するには、文字をクリックしてください


アプリの多くの分野で一般的な検索方法以下の図は、ページのスクロールやトップ地域の機能のアルファベットサイドバーリスト内の文字の先頭を達成するために、より良い-スクロールサードパーティ製のパッケージの今日のVUEのフレームワークを使用します。

出典:凱歌のJava(kaigejava)


image1.png


図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)

        }

    }

}







おすすめ

転載: blog.51cto.com/kaigejava/2433511