IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue-实现买书案例 -> 正文阅读

[JavaScript知识库]vue-实现买书案例

主要考察了:

  • for循环
  • 事件绑定(v-on/@)
  • 计算属性(computed)
  • 侦听器(watch)
  • 本地存储(localStorage)
  • json.stringfy()将对象、数组转换成字符串
  • json.parse()将字符串转成json对象

?

步骤:

  • 完成页面布局和数据的渲染
<template>
  <div id="app">
    <p>请选择你要购买的书籍</p>
    <ul>
      <li v-for="(obj, index) in arr"
          :key="index">
        <span>{{index}}--{{obj.name}}</span>
        <button>买书</button>
      </li>
    </ul>
    <table border="1"
           width="500"
           cellspacing="0">
      <tr>
        <th>序号</th>
        <th>书名</th>
        <th>单价</th>
        <th>数量</th>
        <th>合计</th>
      </tr>
      <tr v-for="(item, ind) in arr"
          :key="ind">
        <td>{{ind + 1}}</td>
        <td>{{item["name"]}}</td>
        <td>{{item["price"]}}</td>
        <td>{{item["count"]}}</td>
        <td>{{item["count"] * item["price"]}}</td>
      </tr>
    </table>
    <p>总价格为: {{allPrice}}</p>
  </div>
</template>

<script>
export default {
  data () {
    return {
      arr: [
        {
          name: "水浒传",
          price: 107,
          count: 0,
        },
        {
          name: "西游记",
          price: 192,
          count: 0,
        },
        {
          name: "三国演义",
          price: 219,
          count: 0,
        },
        {
          name: "红楼梦",
          price: 178,
          count: 0,
        },
      ],
    };
  },
};
</script>

<style scoped>
ul {
  list-style: none;
}
</style>

  • ?实现点击“买书”按钮后,其对应的书的数量增加
<button @click="buy(index)">买书</button>
  methods: {
    // 当点击 “买书” 按钮后,其对应的书的数量应该 +1
    buy (index) {
      this.arr[index]['count']++
    }
  },
  • 当书的数量发现变化时,其对应的“合计”以及“总价格”都应发生相应的改变
  computed: {
    // array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
    // total 	必需。初始值, 或者计算结束后的返回值。
    // currentValue 	必需。当前元素
    // currentIndex 	可选。当前元素的索引
    // arr 	可选。当前元素所属的数组对象。
    // initialValue 	可选。传递给函数的初始值
    // 数组里放的是对象, 而对象是复杂类型, 引用关系, 值改变会触发计算属性重新执行
    allPrice () {
      return this.arr.reduce((sum, obj) => {
        return (sum += obj["count"] * obj["price"])
      },0);
    }
  },
  • 实现数据的缓存?
  watch: {
    // 将 arr 里的数据存储到本地
    arr: {
      deep: true,
      handler(){
        // 数据存储
        // json.stringfy()将对象、数组转换成字符串
        localStorage.setItem('aList', JSON.stringify(this.arr))
      }
    }
  }
      
// 先注释掉之前的 arr
// 从本地取出缓存
// json.parse()将字符串转成json对象
arr: JSON.parse(localStorage.getItem('aList')) || []

完整代码:

<template>
  <div id="app">
    <p>请选择你要购买的书籍</p>
    <ul>
      <li v-for="(obj, index) in arr"
          :key="index">
        <span>{{index}}--{{obj.name}}</span>
        <button @click="buy(index)">买书</button>
      </li>
    </ul>
    <table border="1"
           width="500"
           cellspacing="0">
      <tr>
        <th>序号</th>
        <th>书名</th>
        <th>单价</th>
        <th>数量</th>
        <th>合计</th>
      </tr>
      <tr v-for="(item, ind) in arr"
          :key="ind">
        <td>{{ind + 1}}</td>
        <td>{{item["name"]}}</td>
        <td>{{item["price"]}}</td>
        <td>{{item["count"]}}</td>
        <td>{{item["count"] * item["price"]}}</td>
      </tr>
    </table>
    <p>总价格为: {{allPrice}}</p>
  </div>
</template>

<script>
export default {
  data () {
    return {
      // arr: [
      //   {
      //     name: "水浒传",
      //     price: 107,
      //     count: 0,
      //   },
      //   {
      //     name: "西游记",
      //     price: 192,
      //     count: 0,
      //   },
      //   {
      //     name: "三国演义",
      //     price: 219,
      //     count: 0,
      //   },
      //   {
      //     name: "红楼梦",
      //     price: 178,
      //     count: 0,
      //   },
      // ],
      // 从本地取出缓存
      // json.parse()将字符串转成json对象。
      arr: JSON.parse(localStorage.getItem('aList')) || []
    };
  },
  methods: {
    // 当点击 “买书” 按钮后,其对应的书的数量应该 +1
    buy (index) {
      this.arr[index]['count']++
    }
  },
  computed: {
    // array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
    // total 	必需。初始值, 或者计算结束后的返回值。
    // currentValue 	必需。当前元素
    // currentIndex 	可选。当前元素的索引
    // arr 	可选。当前元素所属的数组对象。
    // initialValue 	可选。传递给函数的初始值
    // 数组里放的是对象, 而对象是复杂类型, 引用关系, 值改变会触发计算属性重新执行
    allPrice () {
      return this.arr.reduce((sum, obj) => {
        return (sum += obj["count"] * obj["price"])
      },0);
    }
  },
  watch: {
    // 将 arr 里的数据存储到本地
    arr: {
      deep: true,
      handler(){
        // 数据存储
        // json.stringfy()将对象、数组转换成字符串
        localStorage.setItem('aList', JSON.stringify(this.arr))
      }
    }
  }
};
</script>

<style scoped>
ul {
  list-style: none;
}
</style>

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章           查看所有文章
加:2021-12-08 13:43:31  更:2021-12-08 13:45:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:19:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码