10_watch.html 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. <script src="./js/vue.js"></script>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <h1>{{num}}</h1>
  12. <!-- 如果事件处理函数内只有一行代码 那么可以直接写在事件后边 不用定义事件处理函数 -->
  13. <button type="button" @click="num++">增加</button>
  14. <div>
  15. <p>姓名{{obj.name}}</p>
  16. <p>年龄{{obj.age}}</p>
  17. </div>
  18. <button type="button" @click="obj.age++">年龄增加</button>
  19. </div>
  20. <script>
  21. new Vue({
  22. el: '#app',
  23. data:{
  24. num: 0,
  25. obj:{
  26. name:'张三',
  27. age:18
  28. }
  29. },
  30. // watch监听属性值的变化
  31. watch:{
  32. // 把需要监听的属性值写在watch对象中 以函数的形式
  33. // 函数的参数是新值和旧值 (修改之后值,修改之前值)
  34. num(newVal,oldVal){
  35. console.log(newVal,oldVal);
  36. if(newVal>10){
  37. // this.num=10;
  38. console.log('num不能大于10');
  39. }
  40. },
  41. // 如果监听的是一个对象属性变化 那么需要使用deep:true来监听对象的属性值的变化
  42. // obj(newVal,oldVal){
  43. // console.log(newVal,oldVal);
  44. // }
  45. // 方法一
  46. // 改为对象的形式
  47. // 可以监听对象中所有属性的变化
  48. // 数组监听同样需要使用deep:true来监听数组的值的变化
  49. // obj:{
  50. // // 监听对象的属性值变化
  51. // handler(newVal,oldVal){
  52. // console.log(newVal,oldVal);
  53. // },
  54. // // 监听对象的属性值变化
  55. // deep:true
  56. // }
  57. // 方法二
  58. // 只能监听对象中具体某一个属性的变化
  59. "obj.age":(newVal,oldVal)=>{
  60. console.log(newVal,oldVal);
  61. }
  62. }
  63. })
  64. </script>
  65. </body>
  66. </html>