vue中watch的详细用法

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

<input type="text" v-model="cityName"/>

new Vue({
  el: ‘#root‘,
  data: {
    cityName: ‘shanghai‘
  },
  watch: {
    cityName(newName, oldName) {
      // ...
    }
  }
})

直接写一个监听处理函数,当每次监听到 cityName 值发生改变时,执行函数。也可以在所监听的数据后面直接加字符串形式的方法名:

watch: {
    cityName: ‘nameChange‘
    }
 } 

immediate和handler

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

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

new Vue({
  el: ‘#root‘,
  data: {
    cityName: ‘‘
  },
  watch: {
    cityName: {
      handler(newName, oldName) {
        // ...
      },
      immediate: true
    }
  }
})

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

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

deep

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

<input type="text" v-model="cityName.name"/>

new Vue({
  el: ‘#root‘,
  data: {
    cityName: {id: 1, name: ‘shanghai‘}
  },
  watch: {
    cityName: {
      handler(newName, oldName) {
      // ...
    },
    deep: true,
    immediate: true
    }
  }
})

设置deep: true 则可以监听到cityName.name的变化,此时会给cityName的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:

watch: {
    ‘cityName.name‘: {
      handler(newName, oldName) {
      // ...
      },
      deep: true,
      immediate: true
    }
  }

这样只会给对象的某个特定的属性加监听器。

数组(一维、多维)的变化不需要通过深度监听,对象数组中对象的属性变化则需要deep深度监听。

原文地址:https://www.cnblogs.com/fqh123/p/10218403.html

时间: 2024-10-29 00:25:38

vue中watch的详细用法的相关文章

详解Vue中watch的高级用法

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

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

linux系统中‘find’的详细用法

"find"指令是linux系统下较为常用的指令,它常见的用法我们也需要掌握,下面主要是对'find'指令的常见用法作一下总结,希望能够对其他人有所帮助. 在linux系统下用"ls"指令查看目录如下: 1.find指令的一般格式: find [path...] -options [-print / -ecex / -ok] 其中:path表示要查找的目录路径 ~表示home目录                        .表示当前目录             

perl中grep的详细用法

最近一直在学习perl语言,下面介绍下如果和在perl编程中使用强大的grep函数. 1. Grep函数grep有2种表达方式: 1 grep BLOCK LIST 2 grep EXPR, LIST BLOCK表示一个code块,通常用{}表示:EXPR表示一个表达式,通常是正则表达式.原文说EXPR可是任何东西,包括一个或多个变量,操作符,文字,函数,或子函数调用. LIST是要匹配的列表. grep对列表里的每个元素进行BLOCK或EXPR匹配,它遍历列表,并临时设置元素为$_.在列表上下

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的时候  发

Flask中的session详细用法教程

**Flask session 概念解释:** session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:'xxxxxx'}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证: 注意 :Flask中的session是存在浏览器中  默认key是session(加密的cookie), 也可以像Django一样基于上述的方式实现保存在数据库 一.配置SECRET_KEY 因为flask的session是通过加密之后放到了cookie中.

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("第一个加

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

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