博客列表 >条件渲染、计算属性和侦听器、计算属性与侦听器之间的区别

条件渲染、计算属性和侦听器、计算属性与侦听器之间的区别

吳
原创
2021年01月20日 02:53:21581浏览

1. 条件渲染 v-if,v-show

  1. <div class="app">
  2. <!-- 单分支 -->
  3. <p v-if="flag">{{msg}}</p>
  4. <button @click="flag= !flag" v-text="tips = flag ? `隐藏` : `显示`"></button>
  5. <!-- 多分支 -->
  6. <p v-if="point > 1000 && point <2000">{{grade[0]}}</p>
  7. <p v-else-if="point >= 2001 && point < 3000">{{grade[1]}}</p>
  8. <p v-else-if="point >= 3001 && point < 4000">{{grade[2]}}}</p>
  9. <p v-else-if="point >=4000">{{grade[3]}}</p>
  10. <p v-else>{{grade[4]}}</p>
  11. <!-- v-show -->
  12. <p v-show="status">Hello World!</p>
  13. </div>
  14. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  15. <script>
  16. const vm = new Vue({
  17. el: '.app',
  18. data() {
  19. return {
  20. msg: 'php中文网',
  21. flag: true,
  22. tips: "隐藏",
  23. point: 4500,
  24. grade: [
  25. "木头会员",
  26. "石头会员",
  27. "金牌会员",
  28. "终身会员",
  29. "只对会员开放",
  30. ],
  31. status: true,
  32. }
  33. }
  34. })
  35. </script>

2.计算属性和侦听器

  • 计算属性
  1. <div class="app">
  2. <p>
  3. 数量:
  4. <input type="number" v-model="num" style="width:5em" min="0" />
  5. </p>
  6. <p>单价:{{price}} 元</p>
  7. <!-- <p>金额:{{num * price}} 元</p> -->
  8. <!-- 计算属性,本质上就是原生的访问器属性 -->
  9. <p>金额:{{amount}} 元</p>
  10. </div>
  11. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  12. <script>
  13. const vm = new Vue({
  14. el: document.querySelector(".app"),
  15. data() {
  16. return {
  17. num: 0,
  18. price: 50,
  19. res: 0,
  20. }
  21. },
  22. // 计算属性:最终会和data合并,所以不要和data中已有属性重名
  23. computed: {
  24. // amount() {
  25. // return this.num * this.price;
  26. // },
  27. amount: {
  28. get() {
  29. return this.num * this.price;
  30. },
  31. set(value) {
  32. console.log(value);
  33. if (value > 1000) this.price = 40;
  34. },
  35. },
  36. },
  37. });
  38. vm.amount = 1001;
  39. </script>
  • 侦听器

  1. <div class="app">
  2. <p><input type="number" v-model="num" style="width:5em" min="0" :max="max"></p>
  3. <p>单价:{{price}} 元</p>
  4. <p>金额:{{res}} 元</p>
  5. </div>
  6. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  7. <script>
  8. const vm = new Vue({
  9. el: document.querySelector(".app"),
  10. data() {
  11. return {
  12. num: 0,
  13. price: 50,
  14. res: 0,
  15. max: 100,
  16. };
  17. },
  18. // 侦听器属性
  19. watch: {
  20. // 侦听的是某一个属性的值得变化,它的属性名与data中要监听的属性同名
  21. num(newValut, oldValue) {
  22. this.res = newValut * this.price;
  23. // 监听库存
  24. if (newValut >= 20) {
  25. this.max = newValut;
  26. alert('库存不足,请补货');
  27. }
  28. }
  29. }
  30. })
  31. </script>

计算属性与侦听器之间的区别:
计算属性:最终要和data合并,所以不要和data的属性重名,适合用于数据之间存在依赖计算的场景。
侦听器属性:侦听某一个属性的变化,它的属性名必须和data中的属性同名,适合用于根据监听数据变化来处理的场景。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议