需求為:一個(gè)地址列表,點(diǎn)擊右邊的字母表中的字母,列表跳轉(zhuǎn)到對(duì)應(yīng)首字母部分。
組件的結(jié)構(gòu)是字母組件在根組件里,根組件里有個(gè)動(dòng)態(tài)組件component,根據(jù)境外目的地和境內(nèi)目的地按鈕的切換來切換下面城市列表組件。
采用的方法是,當(dāng)點(diǎn)擊字母時(shí),觸發(fā)事件將e.target.innerHTML通過$emit('letterChange', e.target.innerHTML)傳給根組件,根組件再將數(shù)據(jù)傳給component動(dòng)態(tài)組件,最后分別在境外目的地和境內(nèi)目的地子組件中用props接收,并用watch監(jiān)聽數(shù)據(jù)的變化,當(dāng)變化時(shí)獲取this.$refs[this.letter][0],并計(jì)算其距離頂部的距離,然后設(shè)置scrolltop,已達(dá)到滾動(dòng)到指定位置的目的。DOM中的列表用循環(huán)字母表事先綁定了ref。
//此為根組件
<template>
<div class="destination">
<letter-list @change="letterChange"></letter-list> //字母組件
<destination-header></destination-header>
<destination-list :letter="letter"></destination-list> //目的地列表組件,里面包含切換境內(nèi)境外的動(dòng)態(tài)組件
</div>
</template>
/此為目的地列表組件
<template>
<section class="del-list">
<div class="tab-contain" :class="{fixed: isfixed}">
<ul class="tab">
<li class="tab-item"
v-for="item of tabs"
:key="item.id"
:class="{ active: currentTab===item.id}"
@click="currentTab = item.id"
>{{item.value}}</li>
<span class="line" :class="{transition:currentTab==='internal-list'}"></span>
</ul>
</div>
<component :is="currentTabComponent" :letter="letter"></component> //此為動(dòng)態(tài)組件,將父組件傳來的值,再向下傳給里面的境內(nèi)目的地和境外目的地組件
</section>
</template>
//此為城市目的地境外部分的組件
<template>
<div class="abroad-list">
<div class="hot">
<div class="title">熱門推薦</div>
<ul class="hot-recommend">
<li v-for="item in hotRecommend" :key="item.id">
<a :href="item.jumpInfo.jumpH5Url">
<img :src="item.images[0]">
<div><span>{{item.title}}</span><p>{{item.subTitle}}</p></div>
</a>
</li>
</ul>
</div>
<div class="all-dest">
<div class="title">選擇目的地</div>
<ul class="all-dest-list">
<li class="dest"
v-for="items of allDest"
:key="items.title"
:ref="items.title"> //此處通過循環(huán)數(shù)組里的每個(gè)對(duì)象,將其title的值綁定為ref,即A、B、C、D...Z
<div class="title">{{items.title}}</div>
<ul class="dest-items">
<li
v-for="item of items.list" //此處通過循環(huán)對(duì)象的list項(xiàng)這個(gè)數(shù)組,添加具體的城市名
:key="item.id">
<a :href="item.jumpInfo.jumpH5Url">{{item.title}}</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</template>
問題是現(xiàn)在傳過來的值在watch中能打印出來
console.log(this.letter) //A B C D E...點(diǎn)擊哪個(gè)打印哪個(gè)
但用到this.$refs里卻是undefined,如下:
consol.log(this.$refs[this.letter]) //undefined,
加上數(shù)組索引
consol.log(this.$refs[this.letter][0]) //Error in callback for watcher "letter": "TypeError: Cannot read property '0' of undefined"
vue直接報(bào)錯(cuò)"Error in callback for watcher "letter": "TypeError: Cannot read property '0' of undefined""
直接寫死$refs的鍵名,像這樣
console.log(this.$refs.A[0]) //<li>...</li>
console.log(this.$refs.B[0]) //<li>...</li>
console.log(this.$refs.G[0]) //<li>...</li>
...
都能打印出對(duì)應(yīng)的元素內(nèi)容。
更離奇的是
console.log(typeof this.letter) //打印出來類型是string
但我用
console.log(this.letter instanceof String) //輸出的確實(shí)false
這個(gè)this.letterd 到底是個(gè)什么東西啊?!崩潰了,搞了一整天了。
之前是直接把點(diǎn)擊獲得的數(shù)據(jù)傳入vuex的store里,然后在列表組件里...mapState獲取并用watch監(jiān)聽,但仍然還是這個(gè)一模一樣的問題。
求大神解答
// 遇到同樣的問題 修改以下代碼試試不報(bào)錯(cuò)
<div class="all-dest">
<div class="title">選擇目的地</div>
<ul class="all-dest-list">
<li class="dest"
v-for="(items, key) of allDest"
:key="key"
:ref="key"> //此處通過循環(huán)數(shù)組里的每個(gè)對(duì)象,將其title的值綁定為ref,即A、B、C、D...Z
<div class="title">{{key}}</div>北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。