使用vue来实现当当网
<div><img src="images/shopping_myshopping.gif" alt="shopping"> <a href="#">全场免运费活动中</a></div>
<!--为您推荐商品开始-->
<div class="shopping_commend">
<div class="shopping_commend_left">根据您挑选的商品,当当为您推荐</div>
<div class="shopping_commend_right"><img src="images/shopping_arrow_up.gif" alt="shopping"
@click="show"></div>
</div>
<div id="shopping_commend_sort" v-show="bool">
<ul v-for="(item,index) in list" :key="index">
<li class="shopping_commend_list_1">{{item.title}}<a href="#" class="blue"></a></li>
<li class="shopping_commend_list_2">¥{{item.price}}</li>
<li class="shopping_commend_list_3">¥{{item.discount}}</li>
<li class="shopping_commend_list_4">
<a href="#" class="shopping_yellow" @click="add(item)">购买</a>
</li>
</ul>
</div>
<div class="shopping_list_top">您已选购以下商品</div>
<div class="shopping_list_border">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="shopping_list_title">
<td>商品名</td>
<td>单品积分</td>
<td>市场价</td>
<td>当当价</td>
<td>数量</td>
<td>删除</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="shopping_product_list" v-for="(item,index) in box" :key="index">
<td class="shopping_product_list_1"><a href="#" class="blue">{{item.title}}</a></td>
<td class="shopping_product_list_2">{{item.product}}</td>
<td class="shopping_product_list_3">¥<span>{{item.price}}</span></td>
<td class="shopping_product_list_4">¥<span>{{item.discount}}</span> </td>
<td class="shopping_product_list_5">
<input type="button" value="-" @click="reduces(item)" /> <!--减-->
<input type="text" v-model="item.val">
<input type="button" value="+" @click="item.val++" />
</td>
<td class="shopping_product_list_6"><a href="javascript:void(0)" class="blue"
@click="dele(index)">删除</a></td>
</tr>
</table>
<div class="shopping_list_end" >
<ul>
<li class="shopping_list_end_1"@click="clears"><input type="image" src="images/shopping_balance.gif"></li>
<li class="shopping_list_end_2">¥<span id="sumPrice">{{total}}</span></li>
<li class="shopping_list_end_3">商品金额总计:</li>
<li class="shopping_list_end_4">您共节省:<label class="shopping_list_end_yellow">¥<span
id="sumDis">{{saves}}</span></label><br />
可获商品积分:<label class="shopping_list_end_yellow" id="sumScore">{{intes}}</label>
</li>
</ul>
</div>
</div>
</div>
	
	new Vue({
 el: "#main",//节点,element简写,选择器
 data: {//vue存放数据的地方,是以键值对的方式来存放
 bool:true,//做标识
 list: [{
 title: 'JavaScript DOM编程艺术',
 price: '39.00',
 discount: '29.30'
 },
 {
 title: '解禁(当当网独家首发)',
 price: '28.00',
 discount: '19.40'
 },
 {
 title: '地王之王(金融危机下房地产行...)',
 price: '32.80',
 discount: '25.10'
 },
 {
 title: '逃庄',
 price: '36.00',
 discount: '27.70'
 },
 {
 title: '深入浅出MySQL数据库开发,优...',
 price: '59.00',
 discount: '47.20'
 },
 {
 title: '大玩家(马未都、王刚推荐!)',
 price: '34.80',
 discount: '20.60'
 },
 {
 title: '都市风水师--官场风水小说',
 price: '39.80',
 discount: '30.50'
 },
 {
 title: '国戏(以麻将术解读宦海沉浮...)',//书名
 price: '25.00',//原价
 discount: '17.30'//打折后
 },
 ],
 box:[
 {
 title:'私募(首部披露资本博弈秘密的金融...',
 product:189,
 price:'25.00',
 val:1,
 discount:'18.90',
 },
 {
 title:'小团圆(张爱玲最神秘小说遗稿)',
 product:173,
 price:'17.30',
 val:1,
 discount:'10.90',
 },
 {
 title:'不抱怨的世界(畅销全球80国的世界...',
 product:154,
 price:'24.80',
 val:1,
 discount:'15.40',
 },
 {
 title:'福玛特双桶洗衣机XPB20-07S',
 product:358,
 price:'458.00',
 val:1,
 discount:'358.00',
 },
 {
 title:'PHP和MySQL Web开发 (原书第4版)',
 product:712,
 price:'95.00',
 val:1,
 discount:'71.20',
 },
 {
 title:'法布尔昆虫记(再买¥68.3即可参加“满199元减10元现金”活)',//书名
 product:10,//积分
 price:'198.00',//原价
 val:1,
 discount:'130.70',//打折后
 }
 ], 
 },
 methods:{//vue实例存放事件的地方
 //收缩
 show(){
 this.bool=!this.bool
 },
 //添加
 add(item){
 for (let i of this.box) {//i是对象 
 // console.log(i.title);
 if(i.title==item.title){//判断
 i.val++//数量加加
 return 
 }
 }
 this.box.push({//在数组末尾添加
 title:item.title,//书名
 product:item.discount*10,//积分 打折后*10
 price:item.price,//原价
 discount:item.discount,//打折后
 val:1
 })
 },
 //添加(方法二)
 // add(title,price,discount){
 // let color=true;//做标识
 // for (let i in this.box) {//循环数组根据下标
 //  if(this.box[i].title===title){//判断根据数组的下标下的书名全等于书名
 //  this.box[i].val++;//数组的下标数量++
 //  color=false;
 //  break
 //  }
 //  // console.log(title);
 // }
 // if(color){//为true时
 //  this.box.push({//在数组末尾添加
 //  title:title,//第二组中的书名数据等于第一组中的书名数据
 //  product:discount*10,//积分 打折后*10
 //  price:price,//第二组中原价数据等于第一组中的原价数据
 //  discount:discount,//第二组中打折后数据等于第一组中的打折后的数据
 //  val:1
 //  })
 // }
 // },
 //点击按钮-- ++
 reduces(item){
 if(item.val>1){//判断,数量大于1时
 Vue.set(item,'val',--item.val)//参数1操作的对象,叁数二添加的属性,参数3需要添加的val值
 }else{
 alert("不能再--啦")
 item.val=1
 }
 },
 //删除行
 dele(index){
 if(confirm("确定要删除吗?")){
 this.box.splice(index,1)
 }
 },
 //清空
 clears(){
 if(this.box.length>0){//判断当前数组长度大于0
 if(confirm("确定要全部清空吗?")){
 this.box = [];
 }
 }
 }
 },
 computed:{
 //总金额(方法一)
 total(){
 let boxs=0
 for (let i of this.box) {
 boxs+=i.discount*i.val
 }
 return boxs.toFixed(2)
 },
 // 方法二
 // total(){
 //  let amounts=0//用于累加
 //  for (let i in this.box) {
 //  // console.log(this.box[i]);
 //  amounts+=this.box[i].discount*this.box[i].val
 //  //折扣价*数量
 //  //  // amounts+=this.box[i].discount*this.box[i].val//打折后*数量
 //  }
 //  return amounts.toFixed(2)//保留小数位数2位
 // },
 
 //节省(方法一)
 // saves(){
 //  let costs=0
 //  for (let i of this.box) {
 //  costs+=(i.price-i.discount)*i.val
 //  }
 //  return costs
 // },
 // (方法二)
 saves(){
 let costs=0//原价
 // let beats=0//打折
 for (let i in this.box) {
 costs+=(this.box[i].price-this.box[i].discount)*this.box[i].val
 // costs+=this.box[i].price*this.box[i].val//原价*数量
 // costs+=this.box[i].price*this.box[i].val//原价*数量
 // beats+=this.box[i].discount*this.box[i].val//打折*数量
 // bb+=(this.box[i].discount-this.box[i].price)*this.box[i].val
 }
 return costs.toFixed(2)
 // return (costs-beats).toFixed(2)
 },
 
 //商品积分(方法一)
 intes(){
 let integral=0
 for (let i of this.box) {
 // console.log(i.price);
 integral+=i.price*i.val
 }
 return integral
 },
 // 方法二
 // intes(){
 //  let integral=0//积分
 //  for (let i in this.box) {
 //  integral+=this.box[i].product*this.box[i].val//积分*数量
 //  }
 //  return integral
 // }
 
 
 
  saves(){
   let spares=0
   for (let i in this.box) {
   spares+=(this.box[i].price-this.box[i].discount)*this.box[i].val//原价-打折后*数量
   // console.log(this.box[i].price,this.box[i].discount,this.box[i].val);
   }
 return spares.toFixed(2)//保留小数位数2位
  }
 
 },
 
 watch:{
 box:{//监听的对象
 deep:true,//开启深度监听
 handler(news,olds){
 // console.log(news)
 for (let i of news) {
 if(isNaN(i.val)||i.val<1){//条件判断 
 alert("非数")
 i.val=1
 }
 }
 }
 }
 },
})
本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com
 
				 
				