3.天气案例_深度监视.html 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>天气案例_深度监视</title>
  8. <!-- 引入vue -->
  9. <script type="text/javascript" src="../js/vue.js"></script>
  10. </head>
  11. <body>
  12. <!--
  13. 深度监视:
  14. 1、Vue中的watch默认不监测对象内部值的改变(只监视一层)。
  15. 2、配置deep:true可以监测对象内部值改变(多层)。
  16. 备注:
  17. 1、Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以。
  18. 2、使用watch时根据数据的具体结构,决定是否采用深度监视。
  19. -->
  20. <!-- 准备好一个容器 -->
  21. <div id="root">
  22. <h2>今天天气很{{info}}</h2>
  23. <button @click="changeWeathers">切换天气</button>
  24. <hr/>
  25. <h3>a的值是:{{numbers.a}}</h3>
  26. <button @click="numbers.a++">点我让a+1</button>
  27. <h3>b的值是:{{numbers.b}}</h3>
  28. <button @click="numbers.b++">点我让b+1</button>
  29. </div>
  30. </body>
  31. <script type="text/javascript">
  32. Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示
  33. const vm = new Vue({
  34. el:'#root',
  35. data:{
  36. isHot:true,
  37. numbers:{
  38. a:1,
  39. b:1
  40. }
  41. },
  42. computed:{
  43. info(){
  44. return this.isHot ? '炎热' : '凉爽'
  45. }
  46. },
  47. methods: {
  48. changeWeathers(){
  49. this.isHot = !this.isHot
  50. }
  51. },
  52. watch:{
  53. isHot:{
  54. // immediate:true, //初始化时让handler调用一下
  55. // handler什么时候调用?当isHot发生改变时。
  56. handler(newValue,oldValue){
  57. console.log('isHot被修改了',newValue,oldValue)
  58. }
  59. },
  60. // 监视多级结构中某个属性的变化
  61. 'numbers.a':{
  62. handler(){
  63. console.log('a被改变了')
  64. }
  65. },
  66. // 监视多级结构中所有属性的变化
  67. numbers:{
  68. deep:true, //开启深度监视,默认值是false
  69. handler(){
  70. console.log('numbers改变了')
  71. }
  72. }
  73. }
  74. })
  75. </script>
  76. </html>