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的Eslint配置文件eslintrc.js说明与规则介绍

    Vue的Eslint配置文件(eslintrc.js)是用来规范Vue项目代码风格和优化代码质量的重要配置文件。本文将详细讲解该配置文件的说明和规则介绍,包括ESLint的安装、配置文件的基本配置、插件的安装和规则的介绍。 ESLint安装 要使用ESLint,首先需要在项目中安装ESLint模块,可以使用npm或yarn进行安装。 npm install …

    Vue 2023年5月28日
    00
  • Vue3 实现验证码倒计时功能

    下面是关于“Vue3 实现验证码倒计时功能”的完整攻略: 1. 创建 Vue3 项目 首先需要创建一个 Vue3 的项目,这里使用 Vue CLI 工具来创建: vue create vue3-captcha 然后使用以下命令启动项目: cd vue3-captcha npm run serve 2. 编写倒计时组件 接下来,我们需要编写一个倒计时组件,用于…

    Vue 2023年5月28日
    00
  • vue中关于template报错等问题的解决

    下面会给出关于vue中template报错的解决攻略。接下来的内容会分为以下几部分: 常见的template报错 解决方案 示例说明 一、常见的template报错 在使用vue时,template会出现一些常见的报错信息,例如: Vue warn: Failed to mount component: template or render function…

    Vue 2023年5月28日
    00
  • 一篇文章带你了解vue.js的事件循环机制

    一篇文章带你了解Vue.js的事件循环机制 Vue.js是一种MVVM模式的前端框架,它依靠响应式系统来追踪数据和DOM的变化,并在必要的时候更新视图。Vue的响应式系统是建立在JavaScript的事件循环机制之上的,了解Vue的事件循环机制对于理解Vue的生命周期和异步行为具有重要意义。 事件循环机制概述 JavaScript是一种单线程(single-…

    Vue 2023年5月28日
    00
  • vue + Electron 制作桌面应用的示例代码

    下面是关于“vue + Electron 制作桌面应用的示例代码”的完整攻略,主要分为以下几个步骤: 1. 创建项目 首先,确保已安装最新版本的 nodejs 和 npm。然后,在命令行工具中输入以下命令创建一个基础的 Vue.js 项目。 vue create my-desktop-app 接下来,进入项目目录并安装 Electron 和 electron…

    Vue 2023年5月27日
    00
  • 在vue中实现简单页面逆传值的方法

    下面是在Vue中实现简单页面逆传值的方法的攻略。首先,我们需要明确以下两个概念: 父组件:组件树中调用子组件的那个组件。 子组件:组件树中被调用的那个组件。 实现逆传值的基本思路是,子组件将要传递的值通过事件的形式传递给父组件,从而实现逆传。具体实现步骤如下: 1. 通过emit事件传递值 在子组件中需要创建一个按钮,通过该按钮触发事件。这里我们假设子组件中…

    Vue 2023年5月28日
    00
  • vue中优雅实现数字递增特效的详细过程

    下面我将详细讲解“Vue中优雅实现数字递增特效的详细过程”。 步骤一:安装插件 Vue中实现数字递增特效需要使用一个叫vue-countup-v2的插件,这个插件可以实现数字的缓动、格式化等功能。我们可以通过npm安装这个插件,在命令行中输入以下命令: npm install –save vue-countup-v2 步骤二:注册组件 在我们使用这个插件之…

    Vue 2023年5月28日
    00
  • 使用vue自定义如何实现Tree组件和拖拽功能

    下面是关于使用Vue自定义实现Tree组件和拖拽功能的攻略: 实现概述 要实现Tree组件和拖拽功能,我们需要先了解下面几个概念: 树形结构 树形结构是一种数据结构,它是由一个个节点构成的层级结构。 每个节点可以有若干个子节点,但只有一个父节点。 递归组件 Vue提供了一种专门处理树形数据的递归组件。 递归组件可以将自身再次调用,实现动态的嵌套结构。 拖拽功…

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