Vue實現仿淘寶商品詳情屬性選擇的功能
先看下效果圖:(同個屬性內部單選,屬性與屬性之間可以多選)

主要實現過程:
所使用到的數據類型是(一個大數組里面嵌套了另一個數組)具體格式如下:
-
attrAndValuees: [
-
{
-
'attrId': 1,
-
'attrName': '味道',
-
'valuees': [
-
{
-
'attrId': 1,
-
'value': '橘子味'
-
},
-
{
-
'attrId': 2,
-
'value': '草莓味'
-
}
-
]
-
},
-
{
-
'attrId': 2,
-
'attrName': '容量',
-
'valuees': [
-
{
-
'attrId': 4,
-
'value': '100ml'
-
},
-
{
-
'attrId': 6,
-
'value': '300ml'
-
}
-
]
-
}]
相關的Html 代碼:
-
<div class="sortItem" v-for="(item,index) in attrAndValuees" :key="item.attrId">
-
<span>{{item.attrName}}:</span>
-
<ul>
-
<li v-for="(itemm,ind) in item.valuees" :key="itemm.attrId" :class="{'cur':sel[index] == ind}" @click="select(index,ind)" class="hand" >{{itemm.value}}</li>
-
</ul>
-
</div>
實現的原理:新建一個數組,數組的每一項代表一個屬性值,由這個數組中的值來改變對應屬性的樣式
在data里新增一個數組 :
-
data () {
-
return {
-
sel: []
-
}
在methods中新增一個select方法,在點擊屬性值的時候調用
-
select: function (index, ind) {
-
this.sel[index] = ind;
-
this.$set(this.sel, index, ind)
-
// this.sel = this.sel.concat([]);
-
-
}
就以上幾個小步驟就可以實現這個效果了,是不是so easy~
不過這中間需要注意的有幾點:
Vue之所以能夠監聽Model狀態的變化,是因為JavaScript語言本身提供了Proxy或者Object.observe()機制來監聽對象狀態的變化。但是,對於數組元素的賦值,卻沒有辦法直接監聽,因此,在這個項目中我們用了set的方法來給數組賦值或者用concat連接一個空數組來對數組進行重新賦值。
若你想了解更多關於數組賦值的知識,可訪問官網:https://cn.vuejs.org/v2/guide/list.html
