最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue實現(xiàn)購物車場景下的應(yīng)用

 更新時間:2017年11月27日 11:06:47   作者:Henry2509885  
這篇文章主要為大家詳細(xì)介紹了Vue實現(xiàn)購物車場景下的應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Vue在購物車場景下的應(yīng)用,供大家參考,具體內(nèi)容如下

購物車場景需求:

1. 商品、店鋪、購物車的選擇

2. 商品刪除

關(guān)鍵代碼

測試數(shù)據(jù)

var _list = [{
 checked: false,
 goods: [{
  name: "商品1",
  price: 23,
  checked: false
 }]
}, {
 checked: false,
 goods: [{
  name: "商品2",
  price: 20,
  checked: false
 }, {
  name: "商品3",
  price: 30,
  checked: false
 }]
}];

店鋪對象組成購物車數(shù)組 _list
商品對象組成店鋪對象下的商品數(shù)組 goods
每個商品和店鋪都有自己的 checked 字段

一. 選擇商品

  • 選擇商品
  • 選擇店鋪下的所有商品
  • 選擇購物車?yán)锏乃猩唐?br />

數(shù)據(jù)綁定

<body class="app">
 <input type="checkbox" v-if="list.length" v-model="checkedAll">
 <div v-for="(shopI, shop) in list" class="shop">
  <input type="checkbox" v-model="shop.checked">
  <div v-for="(goodI, good) in shop.goods" class="good">
   <input type="checkbox" v-model="good.checked">
   <span v-html="good.name"></span>
   <span v-html="good.age"></span>
  </div>
 </div>
</body>
var vue = new Vue({
 el: '.app',
 data: {
  list: _list
 }
});

監(jiān)聽購物車全選

computed: {
 checkedAll: function() {
  return this.checkedShopsCount == this.list.length;
 },
 checkedShopsCount: function() {
  var i = 0;
  this.list.forEach(function(item) {
   if (item.checked == true) i++;
  });
  return i;
 }
}

當(dāng)?shù)赇佭x擇數(shù)(checkedShopsCount)等于店鋪數(shù)(list.length)時,購物車全選(checkedAll)為 true
商品 & 店鋪選擇事件

<input type="checkbox" v-if="list.length" v-model="checkedAll" @change="setAllChecked($event)">
<div v-for="(shopI, shop) in list">
 <input type="checkbox" v-model="shop.checked" @change="setGoodChecked(shop)">
 <div v-for="(goodI, good) in shop.goods">
  <input type="checkbox" v-model="good.checked" @change="setShopChecked(good, shop)">
  <span v-html="good.name"></span>
  <span v-html="good.age"></span>
 </div>
</div>
methods: {
 setAllChecked: function(e) {
  this.list.forEach(function(shop) {
   shop.checked = e.target.checked;
   shop.goods.forEach(function(good) {
    good.checked = e.target.checked;
   });
  });
 },
 setGoodChecked: function(shop) {
  shop.goods.forEach(function(good) {
   good.checked = shop.checked;
  });
 },
 setShopChecked: function(good, shop) {
  if (!good.checked) {
   shop.checked = false;
  } else {
   // 檢查店鋪是否存在 checked 為 false 的商品
   shop.checked = !shop.goods.find(function(good) {
    return !good.checked;
   });
  }
 }
}

選擇購物車時執(zhí)行 setAllChecked,此時選擇所有商品和店鋪
選擇店鋪時執(zhí)行 setGoodChecked,此時選擇該店鋪下所有商品
選擇商品時執(zhí)行 setShopChecked
    當(dāng)商品 checked 為 false 時,取消選擇當(dāng)前店鋪
    當(dāng)商品 checked 為 true 時,判斷當(dāng)前店鋪是否選擇了所有商品,是則選擇當(dāng)前店鋪,否則取消選擇當(dāng)前店鋪

二、刪除商品

<input type="button" value="刪除" @click="deleteGood(shop,goodI,list,shopI)">
methods: {
 deleteGood: function(shop,goodI,list,shopI) {
  shop.goods.splice(goodI, 1);
  if (shop.goods.length==0) {
   list.splice(shopI, 1);
  }
 }
}

全部代碼

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的購物車</title>
<script src="vue.min.js"></script>
</head>
<body class="app">
<input type="checkbox" v-if="list.length" v-model="checkedAll" @change="setAllChecked($event)">
<div v-for="(shopI, shop) in list">
<input type="checkbox" v-model="shop.checked" @change="setGoodChecked(shop)">
<div v-for="(goodI, good) in shop.goods">
<input type="checkbox" v-model="good.checked" @change="setShopChecked(good, shop)">
<span v-html="good.name"></span>
<span v-html="good.age"></span>
<input type="button" value="刪除" @click="deleteGood(shop,goodI,list,shopI)">
</div>
</div>
</body>
<script>
var _list = [{
checked: false,
goods: [{
name: "商品1",
money: 23,
checked: false
}]
}, {
checked: false,
goods: [{
name: "商品2",
money: 20,
checked: false
}, {
name: "商品3",
money: 30,
checked: false
}]
}];
var vue = new Vue({
el: '.app',
data: {
list: _list
},
computed: {
checkedAll: function() {
return this.checkedShopsCount == this.list.length;
},
checkedShopsCount: function() {
var i = 0;
this.list.forEach(function(item) {
if (item.checked == true) i++;
});
return i;
}
},
methods: {
setGoodChecked: function(shop) {
shop.goods.forEach(function(good) {
good.checked = shop.checked;
});
},
setShopChecked: function(good, shop) {
if (!good.checked) {
shop.checked = false;
} else {
shop.checked = !shop.goods.find(function(good) {
return !good.checked;
});
}
},
setAllChecked: function(e) {
this.list.forEach(function(shop) {
shop.checked = e.target.checked;
shop.goods.forEach(function(good) {
good.checked = e.target.checked;
});
});
},
deleteGood: function(shop, goodI, list, shopI) {
shop.goods.splice(goodI, 1);
if (shop.goods.length == 0) {
list.splice(shopI, 1);
}
}
}
});
</script>
</html>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue2.0開發(fā)入門筆記之.vue文件的生成和使用

    vue2.0開發(fā)入門筆記之.vue文件的生成和使用

    本篇文章主要介紹了vue2.0開發(fā)入門筆記之.vue文件的生成和使用 ,非常具有實用價值,需要的朋友可以參考下
    2017-09-09
  • Vue中使用計算屬性的知識點總結(jié)

    Vue中使用計算屬性的知識點總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于Vue中使用計算屬性的知識點總結(jié)內(nèi)容,對此有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2021-12-12
  • Vue3.0插件執(zhí)行原理與實戰(zhàn)

    Vue3.0插件執(zhí)行原理與實戰(zhàn)

    這篇文章主要介紹了Vue3.0插件執(zhí)行原理與實戰(zhàn),Vue項目能夠使用很多插件來豐富自己的功能Vue-Router、Vuex等,節(jié)省了我們大量的人力和物力,下面我們就一起來了解Vue3.0插件的原理吧,需要的小伙伴可以參考一下
    2022-02-02
  • 使用Vue封裝一個自定義的右鍵菜單組件

    使用Vue封裝一個自定義的右鍵菜單組件

    通過自定義右鍵菜單欄,用戶可以根據(jù)自己的需求添加、調(diào)整和刪除菜單選項,所以本文就來為大家介紹一下如何使用使用Vue封裝一個自定義的右鍵菜單組件吧
    2024-01-01
  • vite/Vuecli配置proxy代理解決跨域問題

    vite/Vuecli配置proxy代理解決跨域問題

    這篇文章主要介紹了vite/Vuecli配置proxy代理解決跨域問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解Vue項目中如何解決組件之間的循環(huán)依賴

    詳解Vue項目中如何解決組件之間的循環(huán)依賴

    在大型?Vue?項目中,組件之間的關(guān)系可能會變得非常復(fù)雜,甚至?xí)霈F(xiàn)循環(huán)依賴的問題,本文將通過通俗易懂的方式,講解如何在?Vue?中解決組件之間的循環(huán)依賴問題,希望對大家有所幫助
    2024-11-11
  • VUE?html5-qrcode實現(xiàn)H5掃一掃功能實例

    VUE?html5-qrcode實現(xiàn)H5掃一掃功能實例

    這篇文章主要給大家介紹了關(guān)于VUE?html5-qrcode實現(xiàn)H5掃一掃功能的相關(guān)資料,html5-qrcode是輕量級和跨平臺的QR碼和條形碼掃碼的JS庫,集成二維碼、條形碼和其他一些類型的代碼掃描功能,需要的朋友可以參考下
    2023-08-08
  • vue實現(xiàn)微信二次分享以及自定義分享的示例

    vue實現(xiàn)微信二次分享以及自定義分享的示例

    這篇文章主要介紹了vue實現(xiàn)微信二次分享以及自定義分享的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue中keepAlive組件的作用和使用方法詳解

    vue中keepAlive組件的作用和使用方法詳解

    vue里提供了keep-alive組件用來緩存狀態(tài),這篇文章主要給大家介紹了關(guān)于vue中keepAlive組件的作用和使用方法的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • element vue Array數(shù)組和Map對象的添加與刪除操作

    element vue Array數(shù)組和Map對象的添加與刪除操作

    這篇文章主要介紹了element vue Array數(shù)組和Map對象的添加與刪除功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11

最新評論

云安县| 阳信县| 陈巴尔虎旗| 晋江市| 修武县| 绥芬河市| 万宁市| 积石山| 岢岚县| 泽普县| 雅江县| 南雄市| 商水县| 勃利县| 德惠市| 吴旗县| 电白县| 霍林郭勒市| 九江县| 滦南县| 丹凤县| 衡山县| 屯门区| 黄梅县| 河东区| 延津县| 高邑县| 太湖县| 皋兰县| 南皮县| 磐安县| 冕宁县| 宜川县| 环江| 公安县| 视频| 宁国市| 万源市| 新河县| 吐鲁番市| 韶山市|