### 商品規格的實現
> 規格頁面主要封裝為組件的形式,將得到的數據傳入到子組件當中,很多時候也得根據后端的數據來
> 子組件需要接收的
```
props: {
goodsAttr: {
type: Array,
default: () => [],
},
goods: {
default: function() {
return {}
}
},
item: {
default: function() {
return {}
}
},
},
```
> watch監聽
```
watch: {
goods: {
handler(newValue, oldValue) {
this.goodsStockNumber = this.goods.store_nums;
this.goodsPrice = this.goods.sell_price;
let fields = {};
for (let i in this.goods) {
if (this.$utils.in_array(i, this.fields)) {
fields[i] = this.goods[i];
}
}
Object.assign(fields, {
id: this.goods.id,
num: this.number,
isSubmit: true,
selectedSku: {
id: "",
specSelected: ""
}
});
this.selectedGoodsInfo = fields;
},
deep: true
},
/**
* 對于規格的處理
*/
goodsAttr: {
handler(newValue, oldValue) {
// console.log(2, 'goodsAttr');
if (this.goodsAttr.length <= 0) {
return;
}
let arr = [];
this.selectedSku = [];
for (let obj in this.goodsAttr) {
for (let index in this.goodsAttr[obj]['list']) {
if (this.goodsAttr[obj]['list'][index]['selected'] && !this.goodsAttr[obj]['list'][index][
'disable'
]) {
this.selectedSku.push(this.goodsAttr[obj]['list'][index]);
arr.push({
name: this.goodsAttr[obj].name,
value: this.goodsAttr[obj]['list'][index].value
});
}
}
}
let selectedIndex = [];
for (let obj in this.selectedSku) {
selectedIndex.push(this.selectedSku[obj].pid + "_" + this.selectedSku[obj].id);
}
if (this.goodsAttr.length == selectedIndex.length && this.item[selectedIndex.join("_")] != undefined) {
let g = this.item[selectedIndex.join("_")];
this.goodsPrice = g.sell_price;
this.goodsStockNumber = g.store_nums;
if (this.number >= g.store_nums) {
this.number = g.store_nums;
}
this.selectedGoodsInfo.selectedSku.id = g.product_id;
this.selectedGoodsInfo.isSubmit = true;
} else {
this.selectedGoodsInfo.isSubmit = false;
}
this.specSelected = '';
let s = [];
for (let i in arr) {
s.push(arr[i].name + ":" + arr[i].value);
}
if (s.length > 0) {
this.selectedGoodsInfo.selectedSku.specSelected = s.join(",");
this.specSelected = "己選擇:" + s.join(",");
}
// console.log(5, this.selectedGoodsInfo);
},
deep: true
},
},
```
> 規格點擊
```
/**
* 屬性選擇點擊
*/
onAttrSize(id, value, index, idx, pid) {
let specArray = [];
for (let i in this.goodsAttr) {
specArray[i] = "[A-Za-z0-9_\\:\\,]+";
if (id == this.goodsAttr[i]['id']) {
for (let j in this.goodsAttr[i]['list']) {
let value = this.goodsAttr[i]['list'][j];
if (id == value['pid'] && pid == value['id']) {
let flag = !value.selected;
this.$set(this.goodsAttr[i]['list'][j], 'selected', flag);
if (flag == true) {
specArray[i] = value.pid + ":" + value.id;
}
} else {
this.$set(this.goodsAttr[i]['list'][j], 'selected', false);
}
}
}
}
for (let i in this.goodsAttr) {
for (let j in this.goodsAttr[i]['list']) {
let value = this.goodsAttr[i]['list'][j];
let temp = specArray.slice();
temp[i] = value.pid + ":" + value.id;
let flag = true;
for (let j in this.item) {
let reg = new RegExp(temp.join(","));
if (reg.test(this.item[j].key) && this.item[j].store_nums > 0) {
flag = false;
}
}
this.$set(this.goodsAttr[i]['list'][j], 'disable', flag);
}
}
},
```
> 樣式實現
```
<view class="size-list">
<div class="list" v-for="(value, idx) in item.list"
:class="{'action': value.selected && value.disable == false}"
@click.stop="onAttrSize(item.id,value,index,idx,value.id)" :key="idx">
<text>{{value.value}}</text>
</div>
</view>
```
#### 實現思想
正在構思中
- 前端指南
- 基礎
- HTML、HTTP、web綜合問題
- css部分
- 學習指南
- 開發指南
- css指南
- JavaScript
- 視圖、文件
- canvas
- 二維碼的生成
- 64碼及圖片
- weui
- Promise
- 第三方js
- 網絡請求
- 字符串,數組,時間
- 時間類
- Css
- 布局封裝
- 媒體布局
- 九宮格圖片自適應
- 兩行顯示,且省略
- uni-app
- uniapp踩坑指南
- 表單類
- 商品規格
- 頁面操作
- H5端返回按鈕不顯示
- H5解決瀏覽器跨域問題
- uView——Waterfall 瀑布流
- uniapp中使用復制功能(復制文本到粘貼板)
- 動態導航欄的實現
- React
- React基礎
- 微信小程序
- 上傳多圖
- uni-app 微信小程序生成小程序碼二維碼帶參數
- 小程序分享圖片給好友,到朋友圈,保存到本地
- 緩存封裝
- Vue
- 深度作用選擇器deep
- 使用js實現列表無限循環滾動(橫向)
- js 無限循環垂直滾動列表
- 可視化
- AntV
- 玫瑰圖