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

VUE条件渲染|计算属性|侦听器-------计算属性与侦听器之间的区别

幸福敲门的博客
幸福敲门的博客原创
2021年01月20日 02:09:04627浏览

实例演示条件渲染, 计算属性和侦听器,并比较计算属性与侦听器之间的区别

一、VUE条件渲染

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>条件渲染:v-if,v-show</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <!-- 单分支 -->
  11. <p v-if="flag">{{msg}}</p>
  12. <button
  13. @click="flag = !flag"
  14. v-text="tips = flag ? `隐藏` : `显示`"
  15. ></button>
  16. <!-- 多分支 -->
  17. <p v-if="point > 0 && point < 60">{{grade[0]}}</p>
  18. <p v-else-if="point >= 60 && point < 70">{{grade[1]}}</p>
  19. <p v-else-if="point >= 80 && point < 90">{{grade[2]}}</p>
  20. <p v-else-if="point >= 90 && point < 110">{{grade[3]}}</p>
  21. <p v-else>{{grade[4]}}</p>
  22. <!-- v-show: -->
  23. </div>
  24. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  25. <script>
  26. // v-if: 元素是否添加到页面中
  27. // v-show: 元素是否显示出来(元素已经在dom结构中)
  28. const vm = new Vue({
  29. el: document.querySelector("#app"),
  30. data() {
  31. return {
  32. msg: "核心幕僚:拜登明白只有一个中国,首都在北京",
  33. flag: true,
  34. tips: "隐藏",
  35. point: 120,
  36. grade: [
  37. "不及格!",
  38. "合格",
  39. "良好",
  40. "优秀",
  41. "超级学霸!",
  42. ],
  43. status: true,
  44. };
  45. },
  46. });
  47. </script>
  48. </body>
  49. </html>

图示:
条件渲染:v-if,v-show
总结:

v-if的渲染方式:
会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建;
只有当条件第一次变为真时,才会开始渲染条件块;
切换开销比v-show高;
v-show的渲染方式:
不管初始条件是什么,元素总是会被渲染;
只是简单地基于 CSS 进行切换;
v-show的初始渲染开销比v-if高;
如果需要频繁的切换,则使用v-show;
如果运行时条件很少改变,则用v-if

二、计算属性

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>计算属性</title>
  7. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  8. </head>
  9. <body>
  10. <div class="app">
  11. <p>数量:<input type="number" v-model="num" style="width: 5em" min="0" /></p>
  12. <p>单价: {{price}} 元</p>
  13. <p>金额: {{amount}} 元</p>
  14. </div>
  15. <script>
  16. const vm = new Vue({
  17. el: document.querySelector(".app"),
  18. data() {
  19. return {
  20. num: 0,
  21. price: 80,
  22. res: 0,
  23. };
  24. },
  25. computed: {
  26. amount: {
  27. get() {
  28. return this.num * this.price;
  29. },
  30. set(value) {
  31. console.log(value);
  32. if (value > 1000) this.price = 30;
  33. },
  34. },
  35. },
  36. });
  37. vm.amount = 1001;
  38. </script>
  39. </body>
  40. </html>

图示:
计算属性

三、侦听器

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>侦听器</title>
  7. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  8. </head>
  9. <body>
  10. <div class="app">
  11. <p>数量:<input type="number" v-model="num" style="width: 5em" min="0" :max="max"/></p>
  12. <p>单价: {{price}} 元</p>
  13. <p>金额: {{res}} 元</p>
  14. </div>
  15. <script>
  16. const vm = new Vue({
  17. el: document.querySelector(".app"),
  18. data() {
  19. return {
  20. num: 0,
  21. price: 50,
  22. res: 0,
  23. max: 100,
  24. };
  25. },
  26. // 侦听器属性
  27. watch: {
  28. // 侦听的是某一个属性的值的变化,它的属性名与data中要监听的属性同名
  29. num(newValut, oldValue) {
  30. console.log(newValut, oldValue);
  31. // this.res = this.num * this.price;
  32. this.res = newValut * this.price;
  33. // 监听库存
  34. if (newValut >= 20) {
  35. this.max = newValut;
  36. alert("库存不足,请补货");
  37. }
  38. },
  39. },
  40. });
  41. </script>
  42. </body>
  43. </html>

图示:
侦听器属性
计算属性和侦听器区别:
watch:监测的是属性值, 只要属性值发生变化,其都会触发执行回调函数来执行一系列操作;
computed:监测的是依赖值,依赖值不变的情况下其会直接读取缓存进行复用,变化的情况下才会重新计算。
除此之外,有点很重要的区别是:计算属性不能执行异步任务,计算属性必须同步执行。也就是说计算属性不能向服务器请求或者执行异步任务。如果遇到异步任务,就交给侦听属性。Watch也可以检测computed属性。

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