




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】小程序商城項目中商品屬性分類的實現(xiàn)方法
這篇文章主要介紹小程序商城項目中商品屬性分類的實現(xiàn)方法,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!微信小程序之購物數(shù)量加減所提及的購物數(shù)量的加減,現(xiàn)在說說商品屬性值聯(lián)動選擇。為了讓同學(xué)們有個直觀的了解,到電商網(wǎng)截了一個圖片,就是紅圈所示的部分現(xiàn)在就為大家介紹這個小組件,在小程序中,該如何去寫下圖為本項目的圖:wxml:<view
class="title">商品屬性值聯(lián)動選擇</view>
<!--options-->
<view
class="commodity_attr_list">
<!--每組屬性-->
<view
class="attr_box"
wx:for="{{attrValueList}}"
wx:for-item="attrValueObj"
wx:for-index="attrIndex">
<!--屬性名-->
<view
class="attr_name">{{attrValueObj.attrKey}}</view>
<!--屬性值-->
<view
class="attr_value_box">
<!--每個屬性值-->
<view
class="attr_value
{{attrIndex==firstIndex
||
attrValueObj.attrValueStatus[valueIndex]?(value==attrValueObj.selectedValue?'attr_value_active':''):'attr_value_disabled'}}"
bindtap="selectAttrValue"
data-status="{{attrValueObj.attrValueStatus[valueIndex]}}"
data-value="{{value}}"
data-key="{{attrValueObj.attrKey}}"
data-index="{{attrIndex}}"
data-selectedvalue="{{attrValueObj.selectedValue}}"
wx:for="{{attrValueObj.attrValues}}"
wx:for-item="value"
wx:for-index="valueIndex">{{value}}</view>
</view>
</view>
</view>
<!--button-->
<view
class="weui-btn-area">
<button
class="weui-btn"
type="primary"
bindtap="submit">確定</button>
</view>wxss:.title
{
padding:
10rpx
20rpx;
margin:
10rpx
0;
border-left:
4rpx
solid
#ccc;
}
/*全部屬性的主盒子*/
.commodity_attr_list
{
background:
#fff;
padding:
0
20rpx;
font-size:
26rpx;
overflow:
hidden;
width:
100%;
}
/*每組屬性的主盒子*/
.attr_box
{
width:
100%;
overflow:
hidden;
border-bottom:
1rpx
solid
#ececec;
}
/*屬性名*/
.attr_name
{
width:
20%;
float:
left;
padding:
15rpx
0;
}
/*屬性值*/
.attr_value_box
{
width:
80%;
float:
left;
padding:
15rpx
0;
overflow:
hidden;
}
/*每個屬性值*/
.attr_value
{
float:
left;
padding:
0
10rpx;
margin:
0
10rpx;
border:
1rpx
solid
#ececec;
}
/*每個屬性選中的當(dāng)前樣式*/
.attr_value_active
{
background:
#FFCC00;
border-radius:
10rpx;
color:
#fff;
padding:
0
10rpx;
}
/*禁用屬性*/
.attr_value_disabled
{
color:
#ccc;
}
/*button*/
.btn-area
{
margin:
1.17647059em
15px
0.3em;
}
.btn
{
margin-top:
15px;
background-color:#FFCC00;
color:
#fff;
}
.btn:first-child
{
margin-top:
0;
}js:數(shù)據(jù)部分,一般情況都是訪問接口獲取數(shù)據(jù)的,這里并沒有使用網(wǎng)絡(luò)訪問,為了簡化demo,直接把一組數(shù)據(jù)放在data對象中。Page({
data:
{
firstIndex:
-1,
//準(zhǔn)備數(shù)據(jù)
//數(shù)據(jù)結(jié)構(gòu):以一組一組來進(jìn)行設(shè)定
commodityAttr:
[
{
priceId:
1,
price:
35.0,
"stock":
8,
"attrValueList":
[
{
"attrKey":
"型號",
"attrValue":
"2"
},
{
"attrKey":
"顏色",
"attrValue":
"白色"
},
{
"attrKey":
"大小",
"attrValue":
"小"
},
{
"attrKey":
"尺寸",
"attrValue":
"S"
}
]
},
{
priceId:
2,
price:
35.1,
"stock":
9,
"attrValueList":
[
{
"attrKey":
"型號",
"attrValue":
"1"
},
{
"attrKey":
"顏色",
"attrValue":
"黑色"
},
{
"attrKey":
"大小",
"attrValue":
"小"
},
{
"attrKey":
"尺寸",
"attrValue":
"M"
}
]
},
{
priceId:
3,
price:
35.2,
"stock":
10,
"attrValueList":
[
{
"attrKey":
"型號",
"attrValue":
"1"
},
{
"attrKey":
"顏色",
"attrValue":
"綠色"
},
{
"attrKey":
"大小",
"attrValue":
"大"
},
{
"attrKey":
"尺寸",
"attrValue":
"L"
}
]
},
{
priceId:
4,
price:
35.2,
"stock":
10,
"attrValueList":
[
{
"attrKey":
"型號",
"attrValue":
"1"
},
{
"attrKey":
"顏色",
"attrValue":
"綠色"
},
{
"attrKey":
"大小",
"attrValue":
"大"
},
{
"attrKey":
"尺寸",
"attrValue":
"L"
}
]
}
],
attrValueList:
[]
},
onShow:
function
()
{
this.setData({
includeGroup:
modityAttr
});
this.distachAttrValue(modityAttr);
//
只有一個屬性組合的時候默認(rèn)選中
//
console.log(this.data.attrValueList);
if
(modityAttr.length
==
1)
{
for
(var
i
=
0;
i
<
modityAttr[0].attrValueList.length;
i++)
{
this.data.attrValueList[i].selectedValue
=
modityAttr[0].attrValueList[i].attrValue;
}
this.setData({
attrValueList:
this.data.attrValueList
});
}
},
/*
獲取數(shù)據(jù)
*/
distachAttrValue:
function
(commodityAttr)
{
/**
將后臺返回的數(shù)據(jù)組合成類似
{
attrKey:'型號',
attrValueList:['1','2','3']
}
*/
//
把數(shù)據(jù)對象的數(shù)據(jù)(視圖使用),寫到局部內(nèi)
var
attrValueList
=
this.data.attrValueList;
//
遍歷獲取的數(shù)據(jù)
for
(var
i
=
0;
i
<
commodityAttr.length;
i++)
{
for
(var
j
=
0;
j
<
commodityAttr[i].attrValueList.length;
j++)
{
var
attrIndex
=
this.getAttrIndex(commodityAttr[i].attrValueList[j].attrKey,
attrValueList);
//
console.log('屬性索引',
attrIndex);
//
如果還沒有屬性索引為-1,此時新增屬性并設(shè)置屬性值數(shù)組的第一個值;索引大于等于0,表示已存在的屬性名的位置
if
(attrIndex
>=
0)
{
//
如果屬性值數(shù)組中沒有該值,push新值;否則不處理
if
(!this.isValueExist(commodityAttr[i].attrValueList[j].attrValue,
attrValueList[attrIndex].attrValues))
{
attrValueList[attrIndex].attrValues.push(commodityAttr[i].attrValueList[j].attrValue);
}
}
else
{
attrValueList.push({
attrKey:
commodityAttr[i].attrValueList[j].attrKey,
attrValues:
[commodityAttr[i].attrValueList[j].attrValue]
});
}
}
}
//
console.log('result',
attrValueList)
for
(var
i
=
0;
i
<
attrValueList.length;
i++)
{
for
(var
j
=
0;
j
<
attrValueList[i].attrValues.length;
j++)
{
if
(attrValueList[i].attrValueStatus)
{
attrValueList[i].attrValueStatus[j]
=
true;
}
else
{
attrValueList[i].attrValueStatus
=
[];
attrValueList[i].attrValueStatus[j]
=
true;
}
}
}
this.setData({
attrValueList:
attrValueList
});
},
getAttrIndex:
function
(attrName,
attrValueList)
{
//
判斷數(shù)組中的attrKey是否有該屬性值
for
(var
i
=
0;
i
<
attrValueList.length;
i++)
{
if
(attrName
==
attrValueList[i].attrKey)
{
break;
}
}
return
i
<
attrValueList.length
?
i
:
-1;
},
isValueExist:
function
(value,
valueArr)
{
//
判斷是否已有屬性值
for
(var
i
=
0;
i
<
valueArr.length;
i++)
{
if
(valueArr[i]
==
value)
{
break;
}
}
return
i
<
valueArr.length;
},
/*
選擇屬性值事件
*/
selectAttrValue:
function
(e)
{
/*
點(diǎn)選屬性值,聯(lián)動判斷其他屬性值是否可選
{
attrKey:'型號',
attrValueList:['1','2','3'],
selectedValue:'1',
attrValueStatus:[true,true,true]
}
console.log(e.currentTarget.dataset);
*/
var
attrValueList
=
this.data.attrValueList;
var
index
=
e.currentTarget.dataset.index;//屬性索引
var
key
=
e.currentTarget.dataset.key;
var
value
=
e.currentTarget.dataset.value;
if
(e.currentTarget.dataset.status
||
index
==
this.data.firstIndex)
{
if
(e.currentTarget.dataset.selectedvalue
==
e.currentTarget.dataset.value)
{
//
取消選中
this.disSelectValue(attrValueList,
index,
key,
value);
}
else
{
//
選中
this.selectValue(attrValueList,
index,
key,
value);
}
}
},
/*
選中
*/
selectValue:
function
(attrValueList,
index,
key,
value,
unselectStatus)
{
//
console.log('firstIndex',
this.data.firstIndex);
var
includeGroup
=
[];
if
(index
==
this.data.firstIndex
&&
!unselectStatus)
{
//
如果是第一個選中的屬性值,則該屬性所有值可選
var
commodityAttr
=
modityAttr;
//
其他選中的屬性值全都置空
//
console.log('其他選中的屬性值全都置空',
index,
this.data.firstIndex,
!unselectStatus);
for
(var
i
=
0;
i
<
attrValueList.length;
i++)
{
for
(var
j
=
0;
j
<
attrValueList[i].attrValues.length;
j++)
{
attrValueList[i].selectedValue
=
'';
}
}
}
else
{
var
commodityAttr
=
this.data.includeGroup;
}
//
console.log('選中',
commodityAttr,
index,
key,
value);
for
(var
i
=
0;
i
<
commodityAttr.length;
i++)
{
for
(var
j
=
0;
j
<
commodityAttr[i].attrValueList.length;
j++)
{
if
(commodityAttr[i].attrValueList[j].attrKey
==
key
&&
commodityAttr[i].attrValueList[j].attrValue
==
value)
{
includeGroup.push(commodityAttr[i]);
}
}
}
attrValueList[index].selectedValue
=
value;
//
判斷屬性是否可選
for
(var
i
=
0;
i
<
attrValueList.length;
i++)
{
for
(var
j
=
0;
j
<
attrValueList[i].attrValues.length;
j++)
{
attrValueList[i].attrValueStatus[j]
=
false;
}
}
for
(var
k
=
0;
k
<
attrValueList.length;
k++)
{
for
(var
i
=
0;
i
<
includeGroup.length;
i++)
{
for
(var
j
=
0;
j
<
includeGroup[i].attrValueList.length;
j++)
{
if
(attrValueList[k].attrKey
==
includeGroup[i].attrValueList[j].attrKey)
{
for
(var
m
=
0;
m
<
attrValueList[k].attrValues.length;
m++)
{
if
(attrValueList[k].attrValues[m]
==
includeGroup[i].attrValueList[j].attrValue)
{
attrValueList[k].attrValueStatus[m]
=
true;
}
}
}
}
}
}
//
console.log('結(jié)果',
attrValueList);
this.setData({
attrValueList:
attrValueList,
includeGroup:
includeGroup
});
var
count
=
0;
for
(var
i
=
0;
i
<
attrValueList.length;
i++)
{
for
(var
j
=
0;
j
<
attrValueList[i].attrValues.length;
j++)
{
if
(attrValueList[i].selectedValue)
{
count++;
break;
}
}
}
if
(count
<
2)
{//
第一次選中,同屬性的值都可選
this.setData({
firstIndex:
index
});
}
else
{
this.setData({
firstIndex:
-1
});
}
},
/*
取消選中
*/
disSelectValue:
function
(attrValueList,
index,
key,
value)
{
var
commodityAttr
=
modityAttr;
attrValueList[index].selectedValue
=
'';
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服務(wù)質(zhì)量保證承諾書
- 業(yè)主與物業(yè)協(xié)議
- 法律案例分析練習(xí)題庫集合
- 內(nèi)部培訓(xùn)學(xué)習(xí)進(jìn)度跟蹤表
- 工作報告發(fā)布與跟蹤分析表
- 醫(yī)療器械總經(jīng)銷協(xié)議
- 房地產(chǎn)行業(yè)供需關(guān)系表格
- 養(yǎng)殖生豬購銷合同書
- 農(nóng)民合作社與企業(yè)合作模式研究手冊
- 市場調(diào)研數(shù)據(jù)統(tǒng)計圖表示例(柱狀圖、折線圖等)
- 2025遼寧大連融金征信服務(wù)選聘8人筆試參考題庫附帶答案詳解
- 初中英語語法大全知識點(diǎn)總結(jié)可打印
- 高考語文語言綜合運(yùn)用情景表達(dá)優(yōu)秀課件
- 醫(yī)患溝通技巧培訓(xùn)試題及答案
- iatf16949質(zhì)量管理體系策劃烏龜圖
- 房屋拆除預(yù)算表
- 石膏固定(共61張)課件
- 血漿吸附療法課件
- 第2講 麥克斯韋方程組
- 讀懂教材、讀懂學(xué)生、讀懂課堂,構(gòu)建和諧有效的課堂教學(xué)
- 裝飾施工進(jìn)度計劃網(wǎng)絡(luò)圖及橫道圖
評論
0/150
提交評論