個人主頁網(wǎng)站制作怎么自己找外貿(mào)訂單
最近在封裝一個List組件,外部傳給我數(shù)據(jù),我循環(huán)后將每個Item部分slot到外部,由調(diào)用者自己去寫item布局,類似ElementUI、iView的Tabe列表。
List:
<view v-if="list.length > 0" class="list-scroll__item" v-for="(item, index) in list" :key="item.id" @click="onClickItem(item)"><slot :item="item" :index="index"/>
</view>
調(diào)用:
?<list :list="list"><item slot-scope="{item}"? :item="item"></item></list>
item是自定義每一項的樣式組件,可自行腦補。
**不出意外這樣就可以正常顯示列表數(shù)據(jù)了**,如果出了意外只能顯示一項請配置slot編譯模式。
scopedSlotsCompiler:legacy 為舊版編譯模式,新版模式: auto 與 augmented,可切換嘗試
不出意外就能正常顯示了!
====================================================================
我現(xiàn)在還有第二個需求,就是item里有點擊事件,我要將我點擊的項目傳遞給每個slot的item,然后每個item根據(jù)數(shù)據(jù)做出變化。
現(xiàn)在改動一下:
<list :list="list"><item slot-scope="{item}"? :item="item"? :current="currentItem" @clickItem="(e)=>currentItem=e"></item></list>
currentItem:是頁面數(shù)據(jù)?@clickItem是接收item內(nèi)部點擊事件的數(shù)據(jù),然后賦值給currentItem,
不知道您看明白了沒?總的來說就是我在某一個item發(fā)生點擊事件的時候,將傳出來的值賦值給頁面變量currentItem,然后把currentItem賦值給每個item,只有點擊的item跟currentItem是一個時才做出某些變動,如果不一樣則還原之前的變動。
就是這么個再平常不過的事件,但是currentItem死活都傳不過去,具體討論解釋可參考:
https://github.com/dcloudio/uni-app/issues/495
反正就是無解!!!!!實在沒有辦法我就想其他笨辦法先解決問題吧。
1、首先將:current="currentItem"移動到list組件上,然后list內(nèi)增加props為current的接收對象,就變?yōu)?#xff1a;
<list :list="list" :current="currentItem" ><item slot-scope="{item}"? :item="item"? @clickItem="(e)=>currentItem=e"></item></list>
List內(nèi)部:
props:{list: { type: Array, default: () => [] },
current:{ type:Object, default:()=>{} }
}
2、這樣list組件就能接收到頁面參數(shù)了,然后將list內(nèi)部slot部分改動如下,將接收的參數(shù)拋出去:
<view v-if="list.length > 0" class="list-scroll__item" v-for="(item, index) in list" :key="item.id" @click="onClickItem(item)"><slot :item="item" :index="index" :current="current"/>
</view>
3、 到此外面的slot? item部分就能接收到該參數(shù)了
<list :list="list" :current="currentItem"><item slot-scope="{item,current}"? :item="item"? :current="current" @clickItem="(e)=>currentItem=e"></item></list>
到此一個連貫的傳值操作就結(jié)束了!總結(jié)如下:
slot部分不能直接傳遞頁面參數(shù),也就是作用域以外的參數(shù),但是變相可以傳遞,
1、先傳遞給父組件,并且父組件內(nèi)props接收該參數(shù)
2、父組件內(nèi)slot將接收的參數(shù)slot出去,拋給slot復寫的人
3、復寫slot的人在接收該參數(shù)傳遞給自己復寫的item部分,自己的item增加點擊事件變更傳遞給父組件的值,slot部分的item也就會接收到該值。