10.计算属性和侦听器.html 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. <style>
  8. .size {
  9. width: 400px;
  10. height: 400px;
  11. margin: 200px auto;
  12. border: 1px solid darksalmon;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div id="app">
  18. <div :class="['size']">
  19. 姓:
  20. <input type="text" v-model="firstName">
  21. <br>
  22. 名:
  23. <input type="text" v-model="lastName">
  24. <br>
  25. <!-- 1.插值语法 -->
  26. 我叫: {{firstName + lastName}}
  27. <br>
  28. <!-- 2.methods方法 -->
  29. 我叫:{{getName()}}
  30. <br>
  31. <!-- 3.计算属性:computed -->
  32. 我叫:{{fullName}}
  33. <br>
  34. 新名字:{{myName}}
  35. <br>
  36. <!-- 4.侦听器 -->
  37. 我叫:{{fulls}}
  38. </div>
  39. </div>
  40. <!--
  41. 原理:通过数据劫持(Object.defineproperty) 通过getter(get)和setter(set)实现获取数据 修改数据操作
  42. methods 与 computed 大致相同
  43. 但是:大量的计算数据 需要在计算属性中进行操作
  44. 计算数据写在computed里 性能较快 同步操作
  45. watch 异步操作
  46. watch与computed区别:
  47. 1.computed 是同步操作 有缓存 计算 计算量不大的值 消耗性能
  48. 2.watch 异步操作 无缓存 计算 计算量大的值 不消耗性能
  49. -->
  50. <script src="./vue.js"></script>
  51. <script>
  52. //
  53. var app = new Vue({
  54. el:"#app",
  55. data:{
  56. firstName:"胡",
  57. lastName:"图图",
  58. news:"喜",
  59. old:"羊羊",
  60. fulls:""
  61. },
  62. methods: {
  63. getName() {
  64. return this.firstName + this.lastName
  65. }
  66. },
  67. // 计算属性
  68. computed:{
  69. fullName() {
  70. return this.firstName + this.lastName;
  71. },
  72. // myName() {
  73. // // get() {},
  74. // // set() {}
  75. // }
  76. myName: {
  77. get() {
  78. return this.news + this.old;
  79. },
  80. set() {
  81. this.news = '灰';
  82. this.old = '太郎'
  83. }
  84. }
  85. },
  86. watch:{
  87. // firstName(newValue,oldValue) {
  88. // this.fulls = newValue + this.lastName
  89. // },
  90. // lastName(newValue, oldValue) {
  91. // this.fulls =this.firstName + newValue;
  92. // },
  93. // 补充知识点:
  94. // myName:{
  95. // immediate: true,
  96. // deep: true,
  97. // handler(a) {
  98. // // 方法
  99. // console.log(a,'aaaa')
  100. // return this.fulls = a;
  101. // }
  102. // },
  103. firstName:{
  104. // 开启立即监听
  105. immediate: true,
  106. // 开启深度监听
  107. deep: true,
  108. handler(e) {
  109. // 方法
  110. console.log(e,'aaaa')
  111. return this.fulls = e + this.lastName;
  112. }
  113. },
  114. lastName:{
  115. immediate: true,
  116. deep: true,
  117. handler(e) {
  118. // 方法
  119. console.log(e,'aaaa')
  120. return this.fulls = this.firstName + e;
  121. }
  122. }
  123. }
  124. })
  125. // app.myName = ''
  126. </script>
  127. </body>
  128. </html>