vue2.0 watch里面的 deep和immediate用法说明

下面我来详细讲解一下 "vue2.0 watch里面的 deep和immediate用法说明", 希望对你有所帮助。

watch

Vue.js中,我们可以使用 watch 来监听数据的改变,从而执行对应的操作。 Watch 是 Vue 实例的一个选项属性,用于监听 Vue 实例上的数据变化。当数据发生改变时,会执行 watch 选项的对应方法。

deep

当我们需要监听某个具有嵌套数据结构的对象时, Vue.js 提供了 deep 选项来实现深度监测,因此我们可以在对象的属性发生改变时得到通知。

示例1:当监听的数据对象的值有嵌套时,若只监听外层对象 v ,则其内层对象属性变化时是不会触发 watch 的,如下所示:

<template>
  <div>
    <h3>{{ foo.name }}</h3>
    <button @click="changeName">更改名字</button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        foo: {
          name: '张三',
          sex: '男'
        }
      }
    },
    watch: {
      // 只监听外层对象 foo
      foo(newValue, oldValue) {
        console.log('foo改变了')
      }
    },
    methods: {
      // 点击按钮修改内层对象属性
      changeName() {
        this.foo.name = '李四'
      }
    }
  }
</script>

运行代码后,watch 没有监听到 foo 值的变化。但是如果我们需要监听到所有嵌套的属性改变时,可以使用 deep 来实现深度监听。

<template>
  <div>
    <h3>{{ foo.name }}</h3>
    <button @click="changeName">更改名字</button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        foo: {
          name: '张三',
          sex: '男'
        }
      }
    },
    watch: {
      // 监听所有嵌套属性的变化
      foo: {
        deep: true,
        handler(newValue, oldValue) {
          console.log('foo改变了')
        }
      }
    },
    methods: {
      // 点击按钮修改内层对象属性
      changeName() {
        this.foo.name = '李四'
      }
    }
  }
</script>

运行代码,当点击更改名字按钮时,控制台输出了 'foo改变了' 字符串,表示 watch 监听到了数据的变化,这就是 deep 对象的作用。

需要注意的是,在大多数情况下,使用 deep 会带来性能问题。因为当我们使用 deep 监听对象时,Vue.js 会对对象进行递归遍历,从而会影响监听器的性能。因此除非确实需要监听所有嵌套属性的变化,否则建议不要使用 deep

immediate

immediate 选项用于在 watch 首次被绑定时立即执行对应的处理函数。通常在一个组件刚刚创建时需要执行初始操作时使用。

示例2:这是用户数据的实时搜索功能的示例。添加 ":immediate=true" 参数可以让 watch 中的 userSearch 立即执行。

<template>
  <div>
    <h1>搜索用户</h1>
    <div>
      <label>
        用户名称:
        <input v-model="inputValue" />
      </label>
    </div>
    <ul>
      <li v-for="user in userSearch" :key="user.id">{{ user.name }}</li>
    </ul>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        inputValue: '',
        users: [
          { id: 1, name: '张三' },
          { id: 2, name: '李四' },
          { id: 3, name: '王五' },
          { id: 4, name: '赵六' }
        ]
      }
    },
    computed: {
      userSearch() {
        return this.users.filter(user => user.name.includes(this.inputValue))
      }
    },
    watch: {
      inputValue: {
        immediate: true,
        handler(newVal) {
          console.log(newVal)
        }
      }
    }
  }
</script>

运行代码,当输入用户名的输入框发生变化时,可以发现 watch 监听到数据的变化并输出到控制台。

需要注意的是,当我们使用 immediate 选项时,处理函数不管元素开始处于哪个状态,都会被立即执行一次。因此需要根据具体的业务场景谨慎使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue2.0 watch里面的 deep和immediate用法说明 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • Vue的computed计算属性你了解吗

    Vue的computed计算属性在Vue框架开发中非常常用。它可以根据计算函数里的数据自动计算出结果,并且在数据发生变化时会自动重新计算,然后用于渲染模板。在这篇文章中,我们将深入了解Vue的computed计算属性,掌握计算属性的使用方法和技巧。 什么是Vue的computed计算属性 Vue的computed计算属性是在Vue实例中定义的函数。它返回一个…

    Vue 2023年5月28日
    00
  • VUE 实现动态给对象增加属性,并触发视图更新操作示例

    VUE 实现动态给对象增加属性,并触发视图更新操作可以通过以下两个示例进行说明。 示例一 <template> <div> <button @click="addAttr">添加属性</button> <span>添加属性之前:</span><span>{…

    Vue 2023年5月28日
    00
  • 使用Vue开发一个实时性时间转换指令

    下面是使用Vue开发一个实时性时间转换指令的完整攻略: 1. 确定需求和功能 我们的目标是开发一个指令,可以将输入的时间字符串或时间戳转换为实时性时间。具体实现功能如下: 支持将ISO 8601格式的时间字符串(如”2022-02-01T13:01:23Z”)或时间戳(如1643737283)转换为实时性时间; 实时性时间的格式为”X分钟前”、”X小时前”或…

    Vue 2023年5月28日
    00
  • Vue3父子组件传参有关sync修饰符的用法详解

    下面是详细讲解“Vue3父子组件传参有关sync修饰符的用法详解”的完整攻略。 什么是sync修饰符? 在Vue3中,我们可以使用.sync修饰符将父组件的数据属性与子组件的属性进行双向绑定。例如,我们有一个父组件和一个子组件: <!– 父组件 –> <template> <div> <h2>{{ mess…

    Vue 2023年5月28日
    00
  • vue如何根据url下载非同源文件

    我可以给你详细讲解一下vue如何根据url下载非同源文件的完整攻略: 1. axios下载文件 通过axios来下载非同源文件是常见的做法。具体操作步骤如下: 引入axios库 首先需要在vue项目中引入axios库。 import axios from ‘axios’; 下载文件 然后通过axios发起get请求,通过responseType设置返回的数据…

    Vue 2023年5月27日
    00
  • vue单页应用的内存泄露定位和修复问题小结

    针对“vue单页应用的内存泄露定位和修复问题小结”,我们可以分为以下几个步骤来进行解决。 1. 了解什么是内存泄露 内存泄露指的是程序在运行过程中,动态分配的内存空间未被及时释放,从而导致系统的内存不断被占用,最终导致系统崩溃或者运行缓慢。尤其是前端领域,由于运行在客户端的浏览器环境中,内存泄漏更加容易发生。 2. 定位内存泄露 当我们发现系统出现内存泄漏时…

    Vue 2023年5月27日
    00
  • vue项目配置eslint保存自动格式化问题

    下面是关于Vue项目配置ESLint保存自动格式化的完整攻略: 安装相关插件 首先,需要在Vue项目中安装eslint和eslint-plugin-prettier两个插件,可以使用npm安装,命令如下: npm install eslint eslint-plugin-prettier –save-dev 配置.eslintrc.js文件 在Vue项目的…

    Vue 2023年5月28日
    00
  • vue props type设置多个类型

    Vue的props允许我们设置属性的类型,并且支持一次设置多个类型。下面是设置vue props多个类型的攻略和示例: 设置多个类型 在设置属性类型时,我们可以将其设置为多个类型,可选的类型有:String、Number、Boolean、Array、Object、Date、Function、Symbol、以及自定义构造函数等。可以通过Vue提供的Array类…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部