博客列表 >VUE的条件渲染,计算属性,侦听器演练,比较计算属性与侦听器之间的区别

VUE的条件渲染,计算属性,侦听器演练,比较计算属性与侦听器之间的区别

后网络时代
后网络时代原创
2021年01月19日 18:02:55524浏览

实例演示条件渲染

  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>Document</title>
  7. </head>
  8. <body>
  9. <h2 style="visibility:hidden;">数据测试</h2>
  10. <div id="app">
  11. <!-- v-if 会移除元素 -->
  12. <p v-if="flag" v-text="msg"></p>
  13. <button @click="flag=!flag;tips=flag?'隐藏':'显示'" >{{tips}}</button>
  14. <!-- 多分枝 -->
  15. <p v-if="point > 1000 && point < 2000">{{grade[0]}}</p>
  16. <p v-else-if="point > 2001 && point < 3000">{{grade[1]}}</p>
  17. <p v-else-if="point > 3001 && point < 4000">{{grade[3]}}</p>
  18. <p v-else="point > 4001">{{grade[4]}}</p>
  19. <!-- v-show 是否显示出来 只是隐藏元素 -->
  20. <p v-show="show">v-show只是隐藏元素</p>
  21. </div>
  22. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
  23. <script>
  24. // v-if:元素是否添加到页面中
  25. // v-show:元素是否显示出来(在DOM树中的元素);
  26. const vm=new Vue({
  27. el:document.querySelector('#app'),
  28. data(){
  29. return{
  30. show:true,
  31. msg:'明天吃鸡,不来的是狗',
  32. flag:true,
  33. tips:"隐藏",
  34. point:3500,
  35. grade:['普通会员','中级会员','高级会员','贵族会员'],
  36. };
  37. },
  38. });
  39. </script>
  40. </body>
  41. </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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <!-- <p><input type="number" style='width:5em;' @change="calc" v-model="num" min="0"></p> -->
  11. <!-- 使用计算属性实现 ,计算属性本质上就是原生的访问器属性-->
  12. <p><input type="number" style='width:5em;' v-model="num" min="0"></p>
  13. <p>单价:{{price}}元</p>
  14. <!-- <p>总价:{{total}}元</p> -->
  15. <!-- 使用计算属性实现 -->
  16. <p>总价:{{amount}}元</p>
  17. </div>
  18. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
  19. <script>
  20. const vm=new Vue({
  21. el:document.querySelector('#app'),
  22. data(){
  23. return {
  24. num:0,
  25. price:60,
  26. total:0,
  27. };
  28. },
  29. //计算属性最终要和data合并,所以不要和data的属性重名
  30. computed:{
  31. // 访问器属性有两个getter setter
  32. // 计算器默认是getter属性
  33. amount:{
  34. get(){
  35. return this.price*this.num;
  36. },
  37. set(value){
  38. console.log(value);
  39. if(value>1000) this.price=40;
  40. }
  41. }
  42. }
  43. // methods: {
  44. // calc(){
  45. // this.total=this.price*this.num;
  46. // }
  47. // },
  48. });
  49. vm.amount=1600;
  50. </script>
  51. </body>
  52. </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. </head>
  8. <body>
  9. <div id="app">
  10. <p><input type="number" style='width:5em;' v-model="num" min="0" :max="max"></p>
  11. <p>单价:{{price}}元</p>
  12. <p>总价:{{total}}元</p>
  13. </div>
  14. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
  15. <script>
  16. const vm=new Vue({
  17. el:document.querySelector('#app'),
  18. data(){
  19. return {
  20. num:0,
  21. price:60,
  22. total:0,
  23. max:100,
  24. };
  25. },
  26. //使用监听器属性
  27. watch:{
  28. //监听某一个属性的变化,它的属性名必须和data中的属性同名
  29. num(newvaule,oldvalue){
  30. console.log(newvaule,oldvalue);
  31. this.total=this.price*newvaule;
  32. if(newvaule>=20){
  33. alert('请补货');
  34. this.num=newvaule;
  35. }
  36. },
  37. },
  38. });
  39. //:key 保证在新添项或者删除已有列表的情况下不影响原来的列表的状态
  40. </script>
  41. </body>
  42. </html>

效果:

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

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