10.计算属性.html 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. <!-- v-text v-html v-model -->
  11. <div>
  12. 姓:<input type="text" v-model="firstName" />
  13. <br />
  14. 名:<input type="text" v-model="lastName" />
  15. <br />
  16. <!-- 1.插值模板 -->
  17. 我的名字是:{{firstName + lastName}}
  18. <br />
  19. <!-- 2.methods -->
  20. 我的名字是:{{getName()}}
  21. <br>
  22. <!-- 3.计算属性 -->
  23. 计算属性:{{myName}}
  24. <br>
  25. 计算属性:{{fullName}}
  26. <br>
  27. <!-- 4.侦听器 -->
  28. 侦听器:{{full}}
  29. </div>
  30. </div>
  31. <script src="./vue.js"></script>
  32. <script>
  33. var app = new Vue({
  34. el: "#app",
  35. // 数据
  36. data: {
  37. firstName: "张",
  38. lastName: "三",
  39. newName: "李",
  40. oldName: "四",
  41. full:"",
  42. aaa:""
  43. },
  44. // 生命周期
  45. created() {},
  46. // 方法
  47. methods: {
  48. getName() {
  49. return this.firstName + this.lastName;
  50. },
  51. },
  52. // 计算属性 computed
  53. /**
  54. * 原理:通过数据劫(object.defineProperty),获取数据,通过getter和setter去修改获得数据
  55. * methods 和 computed在初始使用时 并没有区别
  56. * 但时当页面涉及数据计算量大时 计算属性可以减少性能消耗
  57. * 同步操作
  58. */
  59. computed: {
  60. myName:{
  61. get() {
  62. return this.newName + this.oldName
  63. },
  64. // 点击事件后补充
  65. set() {
  66. this.newName = "天气";
  67. this.oldName = "真好";
  68. }
  69. },
  70. fullName() {
  71. return this.aaa = "周三"
  72. }
  73. },
  74. /**
  75. * watch 侦查器 监听器
  76. * 异步操作
  77. */
  78. watch:{
  79. // 初次进入页面不执行 只有数据发生变化后才会进行操作
  80. firstName(newValue,oldValue) {
  81. this.full = newValue + this.lastName;
  82. },
  83. lastName(newValue,oldValue) {
  84. console.log(newValue,'1')
  85. console.log(oldValue,'2')
  86. this.full = this.firstName + newValue;
  87. },
  88. // 补充知识点
  89. // newName:{
  90. // immediate:true, 立即开始
  91. // deep: true, 深度监听
  92. // handler(){
  93. // 方法....
  94. // }
  95. // }
  96. }
  97. });
  98. app.myName = '';
  99. </script>
  100. </body>
  101. </html>