Vue中watch的高级用法

<template>
  <div>
      <input type="text" v-model="value">
  </div>
</template>

<script>
  export default {
    data() {
      return {
        value:null
      }
    },
    created(){
      this.test()
    },
    methods: {
      test(){
        console.log("第一个加载")
      }
    },
    watch: {
      value(val){
        this.test()
      }

    },
  }
</script>

上面的代码的效果是,页面第一次加载需要调用test方法,每次输入都要调用test方法

可以使用handler方法和immediate属性进行优化

immediate:true代表如果在 wacth 里声明了 test 之后,就会立即先去执行里面的handler方法,

如果为 false就跟我们以前的效果一样,不会在绑定的时候就执行。

    watch: {
      value:{
        handler:‘test‘,
        immediate:true
      },

    },  

这样可以每次输入调用test方法,当然要是你需要每次拿到值也可以这样写

    watch: {
      value:{
        //handler:‘test‘,
        handler(val){
          console.log(val)
        },
        immediate:true
      },

    },  

deep的用法

watch 里面还有一个属性 deep,默认值是 false,代表是否深度监听,比如我们 data 里有一个obj属性:

<template>
  <div>
      <input type="text" v-model="obj.a">
  </div>
</template>

<script>
  export default {
    data() {
      return {
        value:null,
        obj:{
          a:null
        }
      }
    },
    created(){

    },
    methods: {
      test(){
        console.log("第一个加载")
      }
    },
    watch: {
      obj:{
         handler(val){
          console.log(val)
        },
        immediate:true,
      },

    },
  }
</script>

当我们在在输入框中输入数据视图改变obj.a的值时,我们发现是无效的

这时候可以使用deep

    watch: {
      obj:{
         handler(val){
          console.log(val)
        },
        immediate:true,
        deep:true
      }}

也可以使用 字符串

    watch: {
      ‘obj.a‘:{
         handler(val){
          console.log(val)
        },
        immediate:true,
        deep:true
      },

原文地址:https://www.cnblogs.com/mydxy/p/11488586.html

时间: 2024-11-07 05:07:58

Vue中watch的高级用法的相关文章

详解Vue中watch的高级用法

我们通过实例代码给大家分享了Vue中watch的高级用法,对此知识点有需要的朋友可以跟着学习下. 假设有如下代码: 上面的代码的效果是,当我们输入firstName后,wacth监听每次修改变化的新值,然后计算输出fullName. handler方法和immediate属性 这里 watch 的一个特点是,最初绑定的时候是不会执行的,要等到 firstName 改变时才执行监听计算.那我们想要一开始就让他最初绑定的时候就执行改怎么办呢?我们需要修改一下我们的 watch 写法,修改过后的 wa

vue中watch的详细用法

在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: <input type="text" v-model="cityName"/> new Vue({ el: '#root', data: { cityName: 'shanghai' }, watch: { cityName(newName, oldName) { // ... } } }) 直接写一个监听处理函数,当每次监听到 cityNam

VUE中关于$emit的用法

一.事件 关于什么是JavaScript事件可以参考:https://www.w3schools.com/js/js_events.asp 二.$emit vue中对$emit的定义见: vm.$emit( eventName, [-args] ) 参数: {string} eventName [...args] 触发当前实例上的事件.附加参数都会传给监听器回调. 三.用途与示例 1.父组件可以使用 props 把数据传给子组件. 1.子组件可以使用 $emit 触发父组件的自定义事件. 子组件

Vue中echarts的基本用法

前言:同大多数的前端框架一样,先读官网的使用方法.学会基本使用后,在实例中找到自己想要demo.拿过来改一改,一个echarts图表就形成,毕竟人家做就是为了方便使用. 我是在vue中下面直接使用的echarts.下面按步骤讲解. 第一步:安装echarts依赖包,然后引入,注意最好在当前使用的组件中引入,而不需要在main.js中注册. //1.首先引入 import echarts from "echarts"; 第二步:在页面中创建一个盒子,用来装载图表 <!-- 2.为e

Vue.js中 watch 的高级用法

假设有如下代码: <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type="text" v-model="firstName"></p> </div> new Vue({ el: '#root', data: { firstName: 'Dawei', lastName: 'Lou', fullName: '' },

正则表达式中分组功能高级用法

通过将部分正则表达式用括号括住来实现分组捕获的用法大部分人都很熟悉,如/.+(\d+).+/捕获字符串中的所有数字部分,然后通过组号就可以抽取出各分组匹配的字符文本或者通过反向引用的方式对分组中的文本进行替换.但是除了不同的分组用法以外,正则表达式引擎还提供了一些高级的分组功能,下面介绍部分比较常用的特殊分组: 1.非捕获分组( non-capturing group) 使用语法:(?:regex)这里的?和:都是语法的组成部分:这种分组正则表达式引擎不会捕获它所匹配的内容即不会为非捕获型分组分

vue 中的key 的用法

(Emitted value instead of an instance of Error) <router-link v-for="item in mycrowdJoinArr">: component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide/list.html#key for more info. 我们有的时候会在npm run dev的时候  发

SQL语句中的select高级用法

为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+-----------+ | id | name | age | height | gender | cls_id | is_delete | +----+-----------+------+--------+--------+--------+-----------+ | 1 | 小明 | 18 | 180.00 | 女

Vue中is属性的用法 可以动态切换组件

is 是组件的一个属性,用来展示组件的名称 is和component联用哈 <component :is="comName"> vue提供了component来展示对应的组件名称 compont是一个占位符,is这个属性,用来展示对应的组件名称 三个子组件 <template> <div> <h2>我是登录组件</h2> </div> </template> <template> <d