zoukankan      html  css  js  c++  java
  • vue组件中使用watch响应数据

    在vue中,使用watch来响应数据的变化。watch的用法大致有三种。下面代码是watch的一种简单的用法:

    普通用法:

    <template>
        //视图
     <input v-model="username" v-on="changeVal" placeholder="用户名"><span>dsfsf</span></input>
    </template>
    <script>
        export default {
            data() {
                return {
                   username:'';
                }
            },
            methods: {
             changeVal(e){
                  this.loginForm.username=e;
              }
            },
            watch: {
                username(newValue){
                   console.log(newValue)//监听username的变化,这种写法,默认第一次不执行该函数
                }
            }
        }
    </script>

    灵活用法:immediate和handler结合使用

    解析:

    这样使用watch时有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

    比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true。

    代码如下:

    <template>
        //视图
     <input v-model="username" v-on="changeVal" placeholder="用户名"><span>dsfsf</span></input>
    </template>
    <script>
        export default {
            data() {
                return {
                   username:'';
                }
            },
            methods: {
             changeVal(e){
                  this.loginForm.username=e;
              }
            },
            watch: {
                username:{
    
                  handler(newName){
                     console.log(newName);/
                  }
                },
              immediate:true
            }
        }
    </script>

    监听的数据后面写成对象形式,包含handler方法和immediate,之前我们写的函数其实就是在写这个handler方法;

    immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。

    wacth检测对象属性数据:deep深度监测

    当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

    <template>
        //视图
     <input v-model="person.username" v-on="changeVal" placeholder="用户名"><span>dsfsf</span></input>
    </template>
    <script>
        export default {
            data() {
                return {
                   person:{
                     username:''  
                  }
                }
            },
            methods: {
             changeVal(e){
                  this.loginForm.username=e;
              }
            },
            watch: {
                'person.username':{
                  handler(newName){
                     console.log(newName);/
                  }
                },
              immediate:true,
              deep:true
            }
        }
    </script>

    设置deep: true 则可以监听到cityName.name的变化,此时会给cityName的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler,上面的写法是精准监听username的变化;

    改文到这里就结束了,感谢查阅;

  • 相关阅读:
    页面显示时间
    如何用JavaScript实现获取验证码的效果
    CSS中style用法详解
    html 样式之style属性的使用
    使用JavaScript实现弹出层效果的简单实例
    [转]创建一个JavaScript弹出DIV窗口层的效果
    eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上
    关于eclipse部署项目后,在tomcat中的webapps文件夹下没有项目
    jsp页面提示“Multiple annotations found at this line:
    Maven3路程(三)用Maven创建第一个web项目(1)
  • 原文地址:https://www.cnblogs.com/nimon-hugo/p/12876228.html
Copyright © 2011-2022 走看看