初学第二十六章:条件渲染/循环渲染/vue改写购物车

本文阅读 2 分钟
首页 VUE基础,Vue3 正文

条件渲染/循环渲染

l6g8rkd4.png

  • v-if:根据条件是否进行渲染
  • v-for:将数据循环渲染到页面中

vue改写购物车

  • 效果图:
    l6g925y1.png
  • 代码部分:
<div class="box">
      <!-- 1. 全选按钮 -->
      <div class="selectAll">
        <!-- 通过双向绑定v-model来制定全选按钮的状态 -->
        <input
          type="checkbox"
          class="check-all"
          name="check-all"
          v-model="checkAll"
        />
        <label for="check-all">全选</label>
      </div>
      <!-- 2. 商品列表 -->
      <ul class="list">
        <li>
          <span>选择</span><span>品名</span><span>数量</span><span>单价</span
          ><span>金额</span>
        </li>
        <!-- 通过v-for渲染数据到页面中 -->
        <li v-for="(v,k) of shuju" :key="k">
          <input type="checkbox" v-model="v.zhuangtai" />
          <span class="content">{{v.name}}</span>
          <input type="number" v-model="v.num" min="1" class="num" />
          <span class="price">{{v.price}}</span>
          <!-- 商品单个的金额直接计算 -->
          <span class="amount">{{v.num*v.price}}</span>
        </li>
        <li>
          <span>总计:</span>
          <span class="total-num">总数量:{{shuliang}}</span>
          <span class="total-amount">总金额:{{zongjia}}</span>
        </li>
      </ul>
      <!-- 3. 结算按钮 -->
      <button class="account">结算</button>
    </div>
 //创建vue实例
      const app = Vue.createApp({
        data() {
          return {
            //数据列表 zhaungtai是按钮的状态为true是选中默认是false
            shuju: [
              {
                name: "手机",
                price: 100,
                num: 1,
                zhuangtai: false,
              },
              {
                name: "电脑",
                price: 200,
                num: 1,
                zhuangtai: false,
              },
              {
                name: "相机",
                price: 300,
                num: 1,
                zhuangtai: false,
              },
            ],
          };
        },

        //计算属性
        computed: {
          // 设置按钮选中状态
          checkAll: {
            get() {
              //将数据用filter返回满足条件的数组 这个数组的只用这个数组的长度
              let arr = this.shuju.filter((item) => item.zhuangtai === true);
              // console.log(arr);
              // console.log(arr.length);
              //当数组的长度等于数据列表的长度的时候返回true这时候全选按钮的状态为true否则就返回false
              if (arr.length == this.shuju.length) {
                return true;
              } else {
                return false;
              }
            },

            set(e) {
              //e是当前全选按钮的状态
              // console.log(e);
              //如果全选按钮状态为true
              if (e) {
                //将所有单选按钮的状态设置为true
                this.shuju.map((item) => (item.zhuangtai = true));
              } else {
                //将所有单选按钮的状态设置为false
                this.shuju.forEach((item) => (item.zhuangtai = false));
              }
            },
          },
          //计算总金额
          zongjia() {
            //先定义一个变量接收结果
            let sum = 0;
            //遍历数据
            this.shuju.forEach((item) => {
              //判断状态是否为true
              if (item.zhuangtai) {
                // 拿到状态为true的商品的数量和单价循环进行相加赋给sum
                sum += item.num * item.price;
              }
            });
            //将结果返回此时这个sum就是总金额
            return sum;
          },
          //计算总数量
          shuliang() {
            let lsum = 0;
            //遍历数据
            this.shuju.forEach((item) => {
              //根据状态拿到为true的数量循环相加赋值给lsum
              if (item.zhuangtai) {
                lsum += item.num;
              }
            });
            //返回lsum这个结果就是总数量
            return lsum;
          },
        },
        //生命周期页面创建自动初始化
        mounted() {
          //初始化商品数量,默认为1
          this.sjnum = 1;
          this.dnnum = 1;
          this.xjnum = 1;
        },
        //将实例挂载到挂载点
      }).mount(".box");
本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.hui-xiang.cn/archives/168.html
-- 展开阅读全文 --
初学第二十五章:VUE安装使用/基础语法
« 上一篇 08-04
初学第二十七章:vue组件注册/组件之间的传值
下一篇 » 08-06

相关推荐