• Vue-购物车实战


    computed 计算属性

     

     

    正则

     

    css部分
    
    [v-cloak] { 
    	display : none ; 
    }
    table{ 
    	border : lpx solid #e9e9e9 ; 
    	border- collapse: collapse ; 
    	border-spacing : 0; 
    	empty-cells : show ; 
    }
    th , td{ 
    	padding : Spx 16px ; 
    	border : lpx solid #e9e9e9 ; 
    	text-align : left; 
    }
    th{ 
    	background: #f7f7f7 ; 
    	color : #5c6b77 ; 
    	font-weight: 600 ; 
    	wh te-space: nowrap ;
    }
    .checks {
      font-size: 16px;
      text-align: center;
    }
    

      

    Js部分

    var app = new Vue({
    el: '#app',
    data:{
    checkall: false,
    list:[
    {
    title_name: '手机',
    content: [
    { id: 1, name: '小米9', price: 3099, count: 9, check: false,
    },
    { id: 2, name: '华为30', price: 4888, count: 1, check: false,
    },
    { id: 3, name: 'Vivo20', price: 3199, count: 1, check: false,
    },
    ]
    },
    {
    title_name: '日常用品',
    content: [
    { id: 1, name: '牙刷', price: 88, count: 1, check: false,
    },
    { id: 2, name: '毛巾', price: 58, count: 1, check: false,
    },
    { id: 3, name: '口杯', price: 28, count: 1, check: false,
    },
    ]
    },
    {
    title_name: '学习用品',
    content: [
    { id: 1, name: '签字笔', price: 18, count: 1, check: false,
    },
    { id: 2, name: '橡皮', price: 8, count: 1, check: false,
    },
    { id: 3, name: '笔记本', price: 2, count: 1, check: false,
    },
    ]
    },
    ],
    },
    computed:{
    totalPrice: function(){
    var total = 0;
    for( var i = 0; i < this.list.length; i++){
    var item = this.list[i];
    for(var j = 0; j<item.content.length; j++){
    var items = item.content[j];
    if(items.check === true){
    total += items.price * items.count;
    }
    }
    }
    return total.toString().replace(/B(?=(d{3})+$)/g,','); //3位式显示金额
    },
    },
    methods:{
    handleReduce: function(index1, index2){
    if(this.list[index1].content[index2].count === 1) return; //商品数量等于‘1’时,关闭按钮
    this.list[index1].content[index2].count--; //商品数量减一
    },
    handleAdd: function(index1, index2){
    this.list[index1].content[index2].count++; //商品数量加一
    },
    handleRemove: function(index1, index2){
    this.list[index1].content.splice(index2, 1);
    },
    handleChecked:function(index1,index2){
    this.list[index1].content[index2].check = !this.list[index1].content[index2].check
    if(this.list[index1].content[index2].check === false){
    this.checkall = false;
    };
    var checkallkey = true;
    for(var i=0;i<this.list.length;i++){
    for(var j=0;j<this.list[i].content.length;j++){
    if(this.list[i].content[j].check === false) checkallkey = false;
    }
    }
    this.checkall = checkallkey;
    },
    handleAllChecked: function(){ //全选 or 取消全选
    if(this.checkall === false){
    for(var i=0; i<this.list.length; i++){
    for(var j=0; j<this.list[i].content.length; j++){
    this.list[i].content[j].check = true;
    }
    }
    this.checkall = true;
    }
    else if(this.checkall === true){
    for(var i=0; i<this.list.length; i++){
    for(var j=0; j<this.list[i].content.length; j++){
    this.list[i].content[j].check = false;
    }
    }
    this.checkall = false;
    }
    },
    },
    });

      

    HTML 部分
    
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title>购物车实战</title>
    		<link rel="stylesheet" type="text/css" href="css/style.css"/>
    		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    	
    	</head>
    	<body>
    		<div id="app" v-cloak>
    			<template v-if="list.length">
    				
    				<!-- <template>里的代码分两部分, 一部分是商品列表信息,我们用表格 table 来展现:
    				另一部分就是带有千位分隔符的商品总价(每隔三位数加进一个逗号〉。这部分代码如下: -->
    				<table border="" cellspacing="" cellpadding="">
    					<thead>
    						<tr>
    							<th><input type="checkbox" id="checkbox" v-model="checked" @change="changeAllChecked()" /></th>
    							<th>商品编号</th>
    							<th>商品价格</th>
    							<th>商品单价</th>
    							<th>购买数量</th>
    							<th>操作</th>
    						</tr>
    					</thead>
    					<tbody>
    						<!-- 循环list -->
    						
    						<tr v-for="(item,index) in list">
    							
    							<td><input type="checkbox" :value="item" v-model="checkedData" /></td>
    							<td>{{ index + 1 }}</td>
    							<td>{{ item.name }}</td>
    							<td>{{ item.price }}</td>
    							<td>
    								<button @click="handleReduce(index)"
    								:disabled="item.count === 1">-</button>
    								{{ item.count }}
    								<button @click="handleAdd(index)">+</button>
    							</td>
    							<td>
    								<button @click="handleRemove(index)">移除</button>
    							</td>
    						</tr>
    					</tbody>
    				</table>
    				<div class="checks">
    					<div>总价:¥ {{ totalPrice }}</div>
    					<br>
    				      <span >
    						  选择的值为:
    						  <tr >
    							 <td>{{ checkedData }}</td>
    						  </tr>
    				      </span>
    				    </div>
    				
    			</template>
    			<div v-else>购物车空了,添加一些商品吧</div>
    		</div>
    		<!-- 注意,这里将vue.min. js ,index.js 
    		文件写在<body 的最底部,如果写在<head>里 Vue 实例将无法创建,
    		因为此时 DOM 还没有被解析完成,除非通过异步或在事件 
    		DOMContentLoaded (IE 是onreadystatechange )
    		触发时再创建 Vue 实例,这有点像 jQuery 的$(document).ready()方法。 -->
    		<script src="https://unpkg.com/vue/dist/vue.js"></script>
    		  <!-- import JavaScript -->
    		  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    		<script src="./js/index.js"></script>
    	</body>
    </html>
    

      

    新鲜刺激的东西永远都有,玩之前掂量掂量自己几斤几两
  • 相关阅读:
    【Rust】二叉搜索树删除
    【Rust】二叉搜索树插入迭代
    【Rust】二叉树后续迭代
    【Rust】二叉树中序迭代
    【Rust】二叉搜索树检索迭代
    【Rust】二叉搜索树检索
    【Rust】二叉搜索树获取极值
    QTP11&11.5破解方法
    1
    操作系统:文件系统 文件系统的格式化操作
  • 原文地址:https://www.cnblogs.com/banxianer/p/14396165.html
Copyright © 2020-2023  润新知