当前位置:   article > 正文

vue中watch的handler,deep,immediate用法详解_handler(newv, oldv) {

handler(newv, oldv) {

我们使用watch监听数据时,有三个选项,handler,deep,immediate

handler

我们平时的写法,就默认写的是handler,vue.js会处理这个逻辑,最终编译出来就是这个handler

  1. watch: {
  2. // 通过输入框文字的变化,来改变下面的数据
  3. ipt: {
  4. handler(newVal,oldVal) {
  5. console.log(111)
  6. if (newVal == "小红") {
  7. this.name = "小红";
  8. this.gender = "女";
  9. this.age = 18;
  10. this.height = 160;
  11. } else {
  12. this.name = "无";
  13. this.gender = "无";
  14. this.age = "无";
  15. this.height = "无";
  16. }
  17. },
  18. immediate:false, //值为true或false,默认false
  19. deep:false //值为true或false,默认false
  20. }
  21. },
  22. //当immediate和deep都为false时,上下两种写法效果一样
  23. watch:{
  24. // 通过输入框文字的变化,来改变下面的数据
  25. ipt(val){
  26. if(val == '小红'){
  27. this.name = '小红'
  28. this.gender = '女'
  29. this.age = 18
  30. this.height = 160
  31. }else{
  32. this.name = '无'
  33. this.gender = '无'
  34. this.age = '无'
  35. this.height = '无'
  36. }
  37. }
  38. },

immediate

该值默认是false,在进入页面时,第一次绑定值,不会立刻执行监听,只有数据发生改变才会执行handler中的操作,我们来输出看一下

immediate为false:

在这里插入图片描述

immediate为true:
我们可以看到,handler会在第一次绑定值时就触发

在这里插入图片描述

deep

vue是不能检测到对象属性的添加或删除,我们使用watch监听一个对象时,除非是直接重新给对象赋值,否则是不能监听到对象里的值的变化的

deep就是用来进行深度监听的!

我们绑定一个对象,修改对象里面的值,看下deep为false时的效果(其实就是毫无效果):

  1. <template>
  2. <div>
  3. <div>
  4. <input type="text" v-model="ipt.text" />
  5. <p>
  6. 姓名
  7. <b>{{name}}</b>
  8. </p>
  9. <p>
  10. 性别
  11. <b>{{gender}}</b>
  12. </p>
  13. <p>
  14. 年龄
  15. <b>{{age}}</b>
  16. </p>
  17. <p>
  18. 身高
  19. <b>{{height}}</b>
  20. </p>
  21. </div>
  22. </div>
  23. </template>
  24. <script>
  25. export default {
  26. data() {
  27. return {
  28. name: "小明",
  29. gender: "男",
  30. age: "26",
  31. height: "180",
  32. ipt: {
  33. text:'小明'
  34. }
  35. };
  36. },
  37. watch: {
  38. // 通过输入框文字的变化,来改变下面的数据
  39. ipt: {
  40. handler(newVal,oldVal) {
  41. console.log(111)
  42. if (newVal.text == "小红") {
  43. this.name = "小红";
  44. this.gender = "女";
  45. this.age = 18;
  46. this.height = 160;
  47. } else {
  48. this.name = "无";
  49. this.gender = "无";
  50. this.age = "无";
  51. this.height = "无";
  52. }
  53. },
  54. immediate:false,
  55. deep:false
  56. }
  57. },
  58. methods: {}
  59. };
  60. </script>

在这里插入图片描述

把deep设为true后,就可以得到我们想要的结果了,可以监听到对象属性的变化

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/113230?site
推荐阅读