教大家使用vue实现 基础购物车。

首先我要知道一点 其能够数据变化的  都用{{}}来进行渲染类似

来看一下实现效果

实现思路  :

1,引进 vue.js

2,setup 将声明变量 方法放在setup里面

3,用响应式声明 ref() 或rective声明 可以声明对象等等  let 也可以声明 但是 不可以与页面响应

4,渲染 加价减价

<td><button class="commodity_redu" @click="item.num--" v-show="item.num>0">-</button><span>{{item.num}}</span><button
							 @click="add_numj(item)" class="add_plus">+</button></td>

vue代码

我们可以写在行内  @click=“item.num--”

这里的 item是我们用v-for 循环过了   所以说item是第一项  v-for的写法:

v-for=“item in list” :key=“item.id”

list是我们声明的数组

5,数量的计算:  可以使用for循环 也可以使用 reduce()的方法 

看 

    let all_num = () => {

        let num = 0

      appu.value.forEach(item => {

  num += item.num })

                        return num

}

这里是数量计算

6,价格的计算:

// 价格计算

                    let all_price = () => {

                        return appu.value.reduce((a, b) => a.num * a.price + b.num * b.price);

                    }

这样写还可以简写   将括号 花扩号去除掉

看完整代码

<!DOCTYPE html>
<html lang="en">

	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</title>
	</head>
	<style>
		* {
        margin: 0;
        padding: 0;
    }

    table {
        min-width: 66%;
        border-left: 1px solid lightgray;
        border-top: 1px solid lightgray;

        border-right: 1px solid lightgray;
        text-align: center;
        margin-left: 200px;

    }
.add_plus{
	width: 20px;
}
    .add_commodity{
        margin-left: 200px;
    }

    .edi_box{
        margin-left: 200px;

    }

    .commodity_redu {
        width: 20px;
    }

    .edi_ediitor{
        margin: 5px;
    }

    /* 延迟缓慢 */

    [v-cloak] {
        display: none;
    }
    #ggid{
        margin-left: 200px;
        
    }
	.active{
		background-color: aquamarine;
	}

</style>

	</style>

	<body>

		<div id="app" v-cloak>
			{{ message }}
			<div>{{name}}</div>
			<!-- 
			<div :style="{color:tru?'#ff0000':''}">判断三元是否为true判断</div>
			<input type="text" v-model="name"> -->


			<!-- <div v-for="(it,index) in appu":key="index">{{it.id}}{{it.name}} -->
			<!-- key的属性 -->
			<!-- <input type="text" name="" id=""> -->
			<!-- 头部删除 -->
			<!-- <button @click="appu.shift()">删除</button> -->
			<!-- </div> -->
			<!-- if,else -->
			<!-- <div v-if="tru"> -->
			<!-- <input type="text" v-model=""> -->
			<!-- </div> -->
			<!-- <div v-else="tru">为false显示</div> -->
			<!-- show -->
			<!-- <div v-show="tru">show的方法使用的是display:none</div> -->
			<!-- <button @click="tru=!tru">显示</button> -->
			<!-- <button @click="tru=!tru">隐藏</button> -->
			<!-- 数量 -->


			<table border="1" cellspacing="0" cellpadding="0">
				<thead>
					<tr>

						<td>商品</td>
						<td>价格</td>
						<td>数量</td>
						<td>操作</td>
					</tr>
				</thead>

				<!-- 循环 -->
				<tbody>
					<tr v-for="(item,index) in appu " :key="item.id" :style="{'background-color':item.num>0?'#00ff00':''}">
						<td>{{item.name}}</td>
						<td>{{item.price}}</td>
						<td><button class="commodity_redu" @click="item.num--" v-show="item.num>0">-</button><span>{{item.num}}</span><button
							 @click="add_numj(item)" class="add_plus">+</button></td>
						<td><button class="edi_ediitor" @click="edi_ieddou(item,index)">编辑</button><button @click="deletv(appu,index)" >删除</button>
						</td>
					</tr>
				</tbody>
				<tfoot>
                    
					<tr>
						<td> </td>
						<td>总价格:¥{{all_price()}}</td>
						<td>总数量:¥{{all_num()}}</td>
						<td></td>
					</tr>
				</tfoot>
			</table>
			<!-- 添加商品 -->
			<button class="add_commodity" @click="addsp">添加商品</button>
			<div v-if="tru" class="edi_box">
				<input type="text" value="" v-model="sp">
				<input type="text" value="" v-model="sl">
				<button @click="yespush(appu,sp,sl)">确认</button>
				<button @click="closet(appu,sp,sl)">取消</button>
			</div>
			<!-- 编辑 -->
			<div v-show="bjtru" id="ggid">
				<input type="text" name="" id="" v-model="edi_data.name">
				<input type="text" name="" id="" v-model="edi_data.price">
				<button @click="edi_save">确认</button>
				<button @click="bjtru=!bjtru">取消</button>
			</div>
		</div>
		<script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.js"></script>
		<script>
			let {
				createApp,
				ref,
				reactive
			} = Vue;

			createApp({
				setup() {

					// 数据
					const appu = ref([{
							id: 1,
							name: '手机',
							num: 0,
							price: 30
						},
						{
							id: 2,
							name: '电脑',
							num: 0,
							price: 20
						}
					])

					// 新增inputv-show
					const tru = ref(false)
					//编辑inputv-show
					const bjtru = ref(false)
					// 确认v-show
					const grrp = ref(false)
					// 数量计算
					let all_num = () => {
						let num = 0
						appu.value.forEach(item => {
							num += item.num
						})
						return num
					}
					// 价格计算
					let all_price = () => {
						return appu.value.reduce((a, b) => a.num * a.price + b.num * b.price);
					}
					// 显示新增显示
					const addsp = () => {
						tru.value = true

					}
					// 加数量
					const add_numj = (item) => {
						item.num++
						grrp.value = true

						console.log(item);

					}
					// kong
					const edi_data = reactive({

						id: 1,
						name: '',
						num: 0,
						price: 0

					})
					const edi_index = ref('0')
					// 编辑回显
					const edi_ieddou = (item, index) => {
						bjtru.value = true
						Object.assign(edi_data, item)
						edi_index.value = index
					}
					// 点击保存替换
					let edi_save = () => {
						appu.value[edi_index.value] = edi_data
						bjtru.value = false
					}


					// 删除
					const deletv = (appu, i) => {
						appu.splice(i, 1)
					}
					// 点击取消
					// const sp = ref('')
					const closet = (appu, sp, sl) => {
						tru.value = false

					}

					// 点击添加
					const yespush = (appu, sp, sl) => {
						console.log(appu);
						tru.value = false
						let obj = {
							price: sl,
							name: sp,
							num: 1
						}
						appu.push(obj)
					}
					console.log(name)
					return {
						yespush,
						closet,
						deletv,
						add_numj,
					
						addsp,
						tru,
						bjtru,
						grrp,
						appu,
						all_num,
						all_price,
						edi_ieddou,
						edi_data,
						edi_save
					}

				}
			}).mount('#app')
		</script>
	</body>

</html>

 

相关推荐

  1. Vue】水果购物-基本渲染

    2024-03-22 20:32:07       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 20:32:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 20:32:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 20:32:07       82 阅读
  4. Python语言-面向对象

    2024-03-22 20:32:07       91 阅读

热门阅读

  1. 5.3、【AI技术新纪元:Spring AI解码】图像生成API

    2024-03-22 20:32:07       37 阅读
  2. 树形el-select封装

    2024-03-22 20:32:07       42 阅读
  3. Element Plus 文本域设置固定行数

    2024-03-22 20:32:07       40 阅读
  4. trpc-go 博客系统

    2024-03-22 20:32:07       41 阅读
  5. 使用docker搭建docker-osx

    2024-03-22 20:32:07       44 阅读
  6. 蓝桥杯 蓝肽子序列

    2024-03-22 20:32:07       49 阅读
  7. echarts数据下钻如何配置

    2024-03-22 20:32:07       44 阅读
  8. 开灯问题 C语言

    2024-03-22 20:32:07       45 阅读
  9. RabbitMQ如何实现延迟消息?

    2024-03-22 20:32:07       47 阅读