在线看毛片视频-国产免费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>
  • 日本中文字幕网址| 国内少妇毛片视频| 妞干网在线观看视频| 久久精品久久99| 中国黄色片免费看| 在线观看的毛片| av免费网站观看| 久久网站免费视频| 国产午夜伦鲁鲁| 国产麻花豆剧传媒精品mv在线| 菠萝蜜视频在线观看入口| 国产日本欧美在线| 国产高清精品软男同| 在线播放黄色av| 亚洲成人手机在线观看| 日本网站在线看| 成人短视频在线看| 白白操在线视频| 国产午夜精品视频一区二区三区| av中文字幕av| 夫妻免费无码v看片| 岳毛多又紧做起爽| 激情黄色小视频| 在线无限看免费粉色视频| 日本免费黄色小视频| 日韩av高清在线看片| 国产成人综合一区| 一本—道久久a久久精品蜜桃| 最新av网址在线观看| 日本精品久久久久久久久久| 成人中文字幕在线播放| www.99在线| 五月天色婷婷综合| 国产精品免费入口| 亚洲av毛片在线观看| 女人床在线观看| 国产又大又硬又粗| 超碰91在线播放| 欧美国产亚洲一区| xxx中文字幕| 波多野结衣家庭教师视频| 欧美丝袜在线观看| 日韩人妻精品无码一区二区三区| 91极品视频在线观看| 成人一级生活片| 激情视频免费网站| 国产精品沙发午睡系列| 一二三av在线| 国产九九在线视频| 免费网站在线观看视频| 久久综合在线观看| 人妻有码中文字幕| 欧美交换配乱吟粗大25p| 五月天激情视频在线观看| 国产91视频一区| 一区二区三区四区毛片| 三年中国国语在线播放免费| 日本中文字幕网址| 久久国产精品免费观看| 精品日韩久久久| 99久久激情视频| 国产主播在线看| 美女日批免费视频| 欧美在线一区视频| 青青青青草视频| 伊人网在线免费| 黄色a级在线观看| 999久久久精品视频| 午夜免费福利视频在线观看| 国模杨依粉嫩蝴蝶150p| 激情婷婷综合网| 能看的毛片网站| 少妇激情一区二区三区| 手机在线免费观看毛片| 九九热在线免费| 我看黄色一级片| 15—17女人毛片| 伊人成人免费视频| 91九色国产ts另类人妖| 日韩在线视频在线| 国产一线二线三线女| 日韩av综合在线观看| 久久无码高潮喷水| 自拍偷拍一区二区三区四区| 国产色视频在线播放| 日韩精品aaa| 欧美一级视频在线播放| 激情六月丁香婷婷| 亚洲这里只有精品| 中文字幕一区二区三区四区五区人| 伊人成人免费视频| 成人网站免费观看入口| 少妇人妻互换不带套| 一区二区在线免费看| 日韩国产精品毛片| 男人操女人逼免费视频| 91制片厂毛片| 男人的天堂avav| 大肉大捧一进一出好爽动态图| 中文字幕第21页| 国产 国语对白 露脸| 成年人视频在线免费| 污免费在线观看| 成人免费观看视频在线观看| 五月婷婷之婷婷| 国产不卡一区二区视频| 又色又爽又高潮免费视频国产| 视频区 图片区 小说区| 女性女同性aⅴ免费观女性恋| 青青草久久伊人| 亚洲熟妇av一区二区三区漫画| 天天操天天干天天做| 成年人网站免费视频| 亚洲欧美一二三| 欧美视频第三页| xxxx18hd亚洲hd捆绑| 国产精品美女在线播放| 久久99999| 久草综合在线观看| www黄色日本| 青草网在线观看| 欧美少妇一级片| 天美一区二区三区| 国产一二三区av| 欧在线一二三四区| 午夜精品久久久久久久无码| 99999精品| 肉色超薄丝袜脚交| www.色欧美| 亚洲一区二区在线视频观看| 91看片就是不一样| 国产免费成人在线| 日韩在线xxx| 日韩在线xxx| 欧美黑人又粗又大又爽免费| 欧美激情视频免费看| 男女猛烈激情xx00免费视频| 国产精品国三级国产av| 日本丰满少妇黄大片在线观看| 视频二区在线播放| 不用播放器的免费av| 欧美性受xxxx黒人xyx性爽| 男人的天堂最新网址| 中文字幕22页| 国产精品美女在线播放| 欧美 另类 交| 无码人妻精品一区二区蜜桃网站| 欧洲美女和动交zoz0z| 国产一级大片免费看| 老太脱裤让老头玩ⅹxxxx| 国产精品网站免费| 蜜臀久久99精品久久久酒店新书 | 污片在线免费看| 国内av一区二区| 男女啪啪免费观看| 国产综合中文字幕| 能在线观看的av网站| 精品国产乱码久久久久久1区二区| 黄色免费高清视频| 你懂的av在线| 亚洲精品第三页| 99久久国产综合精品五月天喷水| 又粗又黑又大的吊av| 少妇一级淫免费放| 成人黄色片免费| 91在线视频观看免费| 国产又黄又爽免费视频| 1024精品视频| 欧美日韩视频免费在线观看| 丁香色欲久久久久久综合网| 丝袜老师办公室里做好紧好爽| 亚洲精品mv在线观看| 999一区二区三区| 日韩av在线中文| 亚洲 高清 成人 动漫| www激情五月| 精品久久久久av| 亚洲中文字幕无码一区二区三区 | 每日在线观看av| 小明看看成人免费视频| 日韩精品一区在线视频| 色18美女社区| 国内外成人免费激情视频| 91香蕉视频免费看| 国产aaaaa毛片| 亚洲国产精品久久久久婷蜜芽| 制服丝袜中文字幕第一页| 免费毛片小视频| 国产真人做爰毛片视频直播| 欧美一级特黄aaa| 成年人在线观看视频免费| 国产极品在线视频| 国产爆乳无码一区二区麻豆| 亚洲精品在线视频播放| 一级黄色特级片| 天堂中文视频在线| 8x8x最新地址| 久久人妻精品白浆国产| 日本成年人网址| 国产成人a亚洲精v品无码|