在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

微信小程序商城項目中商品屬性分類的完成

微信小程序商城項目中商品屬性分類的完成

更新時間:2025-09-25 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。
這篇文章主要為大家詳細介紹了微信小程序商城項目之商品屬性值聯動選擇,具有一定的參考價值,感興趣的小伙伴們可以參考一下

續上一篇的文章:微信小程序之購物數量加減

所提及的購物數量的加減,現在說說商品屬性值聯動選擇。

為了讓同學們有個直觀的了解,到電商網截了一個圖片,就是紅圈所示的部分

微信小程序商城項目中商品屬性分類的實現

現在就為大家介紹這個小組件,在小程序中,該如何去寫
下圖為本項目的圖:

微信小程序商城項目中商品屬性分類的實現

wxml:

<view class="title">商品屬性值聯動選擇</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; 
} 
/*每個屬性選中的當前樣式*/ 
.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:

數據部分,一般情況都是訪問接口獲取數據的,這里并沒有使用網絡訪問,為了簡化demo,直接把一組數據放在data對象中。

Page({ 
 data: { 
 firstIndex: -1, 
 //準備數據 
 //數據結構:以一組一組來進行設定 
 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: this.data.commodityAttr 
 }); 
 this.distachAttrValue(this.data.commodityAttr); 
 // 只有一個屬性組合的時候默認選中 
 // console.log(this.data.attrValueList); 
 if (this.data.commodityAttr.length == 1) { 
 for (var i = 0; i < this.data.commodityAttr[0].attrValueList.length; i++) { 
 this.data.attrValueList[i].selectedValue = this.data.commodityAttr[0].attrValueList[i].attrValue; 
 } 
 this.setData({ 
 attrValueList: this.data.attrValueList 
 }); 
 } 
 }, 
 /* 獲取數據 */ 
 distachAttrValue: function (commodityAttr) { 
 /** 
 將后臺返回的數據組合成類似 
 { 
 attrKey:'型號', 
 attrValueList:['1','2','3'] 
 } 
 */ 
 // 把數據對象的數據(視圖使用),寫到局部內 
 var attrValueList = this.data.attrValueList; 
 // 遍歷獲取的數據 
 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,此時新增屬性并設置屬性值數組的第一個值;索引大于等于0,表示已存在的屬性名的位置 
 if (attrIndex >= 0) { 
 // 如果屬性值數組中沒有該值,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) { 
 // 判斷數組中的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) { 
 /* 
 點選屬性值,聯動判斷其他屬性值是否可選 
 { 
 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 = this.data.commodityAttr; 
 // 其他選中的屬性值全都置空 
 // 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('結果', 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 = this.data.commodityAttr; 
 attrValueList[index].selectedValue = ''; 
 
 // 判斷屬性是否可選 
 for (var i = 0; i < attrValueList.length; i++) { 
 for (var j = 0; j < attrValueList[i].attrValues.length; j++) { 
 attrValueList[i].attrValueStatus[j] = true; 
 } 
 } 
 this.setData({ 
 includeGroup: commodityAttr, 
 attrValueList: attrValueList 
 }); 
 
 for (var i = 0; i < attrValueList.length; i++) { 
 if (attrValueList[i].selectedValue) { 
 this.selectValue(attrValueList, i, attrValueList[i].attrKey, attrValueList[i].selectedValue, true); 
 } 
 } 
 }, 
 /* 點擊確定 */ 
 submit: function () { 
 var value = []; 
 for (var i = 0; i < this.data.attrValueList.length; i++) { 
 if (!this.data.attrValueList[i].selectedValue) { 
 break; 
 } 
 value.push(this.data.attrValueList[i].selectedValue); 
 } 
 if (i < this.data.attrValueList.length) { 
 wx.showToast({ 
 title: '請完善屬性', 
 icon: 'loading', 
 duration: 1000 
 }) 
 } else { 
 wx.showToast({ 
 title: '選擇的屬性:' + value.join('-'), 
 icon: 'sucess', 
 duration: 1000 
 }) 
 } 
 } 
})

運行效果:

微信小程序商城項目中商品屬性分類的實現

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

微信小程序商城中側欄分類的效果實現

微信小程序商城項目之購物數量加減

微信小程序購物商城系統開發所需工具

以上就是微信小程序商城項目中商品屬性分類的實現的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 精品视频一区二区在线| 五十路熟女丰满大屁股| 男女啪啪网站视频| 欧美 国产 日本| 日本手机在线视频| 成人免费看片'免费看| 九九久久九九久久| 艳母动漫在线观看| 加勒比海盗1在线观看免费国语版| 狠狠操狠狠干视频| 国产又黄又猛的视频| 欧美性受xxxxxx黑人xyx性爽| 黑森林精品导航| 国产永久免费网站| 手机成人av在线| 国产爆乳无码一区二区麻豆| 91亚洲精品国产| 欧美成人一区二区在线观看| 美女黄色片视频| 日本特级黄色大片| av日韩一区二区三区| 国语对白做受xxxxx在线中国| 在线免费观看视频黄| 中文国产在线观看| www.av片| 伊人国产在线视频| 毛片在线视频观看| 91av在线免费播放| 善良的小姨在线| 日韩精品视频久久| 成人黄色一级大片| 国产女主播自拍| 亚洲免费黄色网| 高清欧美精品xxxxx| 九色91popny| 日本福利视频网站| 91人人澡人人爽人人精品| 日韩不卡视频一区二区| 杨幂毛片午夜性生毛片| 黄色一级片国产| 色乱码一区二区三区在线| 国产91沈先生在线播放| 999这里有精品| 色综合av综合无码综合网站| 黄色小视频大全| 黄色手机在线视频| 日韩久久一级片| 人人妻人人澡人人爽欧美一区双| 北条麻妃av高潮尖叫在线观看| 神马午夜伦理影院| 日韩精品aaa| 99热手机在线| 777久久久精品一区二区三区| 国内精品国产三级国产99| 天天操,天天操| 国产精品天天av精麻传媒| 欧美精品自拍视频| 国产一区二区片| 黄黄视频在线观看| 最新av在线免费观看| 成人不卡免费视频| 一区二区三区入口| 亚洲污视频在线观看| 成人在线免费播放视频| 久久精品视频16| 内射国产内射夫妻免费频道| 欧美一级视频免费看| 真人抽搐一进一出视频| 人体内射精一区二区三区 | 国产一伦一伦一伦| 成人午夜激情av| 57pao国产成永久免费视频| 国产第一页视频| 爱爱爱爱免费视频| 亚洲视频在线不卡| 男女啪啪免费观看| 久久久久久久久久网| 欧美日韩在线中文| 国产超碰在线播放| 91香蕉视频免费看| 国产在线视频综合| 又粗又黑又大的吊av| 99视频精品免费| 日韩精品视频一二三| 亚洲综合激情五月| 国产精品网站免费| 亚洲最大天堂网| 99在线观看视频免费| 无码精品国产一区二区三区免费| 成年人在线观看视频免费| 999在线精品视频| www插插插无码免费视频网站| 青青青国产在线观看| 91视频免费版污| 波多野结衣激情| 色综合av综合无码综合网站| 91女神在线观看| 99视频在线免费播放| xxx国产在线观看| 五月丁香综合缴情六月小说| 成人在线观看黄| 精品一区二区三区毛片| jizz欧美激情18| 性一交一乱一伧国产女士spa| 国产淫片av片久久久久久| 中文字幕第三区| 香蕉视频网站入口| 成人网站免费观看入口| 国产农村妇女精品久久| 国产精品第12页| 性高湖久久久久久久久aaaaa| 国产又大又黄又猛| 俄罗斯av网站| 成人av在线播放观看| 色国产在线视频| 日韩一级免费在线观看| 国精产品一区一区三区视频| 国产av第一区| 成人亚洲免费视频| 天天爽夜夜爽一区二区三区| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | av一区二区三区免费观看| 久久黄色片网站| 任你操这里只有精品| 凹凸国产熟女精品视频| 黄网站欧美内射| 日韩av在线播放不卡| 国产欧美久久久久| japanese在线播放| 国产树林野战在线播放| 99精品视频免费版的特色功能| 九热视频在线观看| jizzzz日本| 亚洲男人天堂av在线| 九一精品久久久| 三级网在线观看| 在线观看污视频| 欧美日韩不卡在线视频| 日本丰满少妇xxxx| 久久久久久久久久久免费视频| 一区二区传媒有限公司| 成人三级视频在线播放| 亚洲老女人av| 日韩av影视大全| 免费看毛片的网址| 日本日本19xxxⅹhd乱影响| 国产精品欧美激情在线观看| 亚洲少妇久久久| 天天干天天操天天干天天操| 91社在线播放| 欧美a在线视频| 中文字幕av不卡在线| 51xx午夜影福利| 国产精品裸体瑜伽视频| 中文字幕第80页| 白白操在线视频| 老熟妇仑乱视频一区二区| 一区二区三区国产好的精华液| 欧美a级黄色大片| 久久久久狠狠高潮亚洲精品| 久久99爱视频| 妺妺窝人体色777777| 一区二区三区免费播放| 欧美高清中文字幕| 日日噜噜夜夜狠狠| 91黄色在线看| 少妇网站在线观看| 每日在线观看av| 91亚洲一区二区| 欧美牲交a欧美牲交aⅴ免费真| 亚洲精品中文字幕乱码无线| 国产午夜福利在线播放| 成人高清在线观看视频| 国产男女无遮挡| 日韩亚洲欧美一区二区| www.久久av.com| 免费成人午夜视频| 日本高清xxxx| 污污的网站免费| 成人观看免费完整观看| 国产在线播放观看| eeuss中文| 奇米视频7777| 蜜臀视频一区二区三区| 老太脱裤子让老头玩xxxxx| 欧美精品一区二区性色a+v| 69久久久久久| 嫩草av久久伊人妇女超级a| 日韩avxxx| 草草久久久无码国产专区| 日韩国产小视频| 欧美一二三不卡| 日韩人妻一区二区三区蜜桃视频| 亚洲黄色片免费看| 特级西西444www| a级网站在线观看| 国产91porn| www污在线观看| 福利视频免费在线观看| 大陆av在线播放|