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

yizhihongxing

下面我来详细讲解一下 "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组件打包并发布到npm的全过程

    下面是Vue组件打包并发布到npm的全过程: 第一步:创建Vue组件项目 首先,我们需要创建一个Vue组件项目,可以使用Vue CLI来创建项目。具体步骤如下: 打开命令行工具,并输入以下命令来安装Vue CLI: npm install -g @vue/cli 接着,在指定的目录下运行以下命令来创建一个Vue组件项目: vue create your-pr…

    Vue 2023年5月28日
    00
  • vue中渲染对象中属性时显示未定义的解决

    当在Vue中渲染对象中的属性时,有时会遇到属性未定义的情况,会导致渲染问题。以下是在Vue中解决该问题的攻略: 步骤1:使用v-if条件语句 如果在Vue的组件中使用对象的属性,可以通过使用v-if条件语句来判断该属性是否存在,从而避免了在渲染时引用未定义的属性。 <div v-if="obj && obj.property&…

    Vue 2023年5月28日
    00
  • 一步一步实现Vue的响应式(对象观测)

    实现Vue的响应式(对象观测) 什么是Vue的响应式? Vue的响应式是指当Vue数据模型中的数据发生变化时,页面中涉及这些数据的部分会自动重新渲染并更新。Vue通过数据劫持方式实现响应式,也就是通过监听对象属性的变化来实现自动触发视图更新。 如何实现Vue的响应式? Vue的响应式是基于Object.defineProperty()方法实现。该方法能够监听…

    Vue 2023年5月27日
    00
  • vue-cli的工程模板与构建工具详解

    Vue CLI的工程模板与构建工具详解 Vue CLI是一个基于Vue.js进行快速开发的完整解决方案,可以快速创建Vue项目,自动管理项目依赖、配置Webpack构建环境,并提供了Vue项目的预设配置和插件,并且建议使用ES6语法。Vue CLI工具内置了大量常用插件的快速配置,使构建Vue应用变得简单易用。Vue CLI的命令行界面(CLI)可以轻松快捷…

    Vue 2023年5月27日
    00
  • vue设计一个倒计时秒杀的组件详解

    Vue设计一个倒计时秒杀的组件是一种常见的需求,在电商领域比较常见。以下是实现该组件的详解: 设计组件 首先,我们需要考虑该组件的设计和功能。该组件需要实现一个倒计时的效果,并且在倒计时结束时需要执行某些操作,比如提交订单、弹出提示等。因此,我们可以将该组件分为两部分:倒计时显示和倒计时结束时的操作。 倒计时显示部分可以通过计算时分秒来实现;倒计时结束时的操…

    Vue 2023年5月29日
    00
  • 前端vue3使用axios调用后端接口的实现方法

    当前端使用Vue3框架时,常常需要通过HTTP请求与后端进行交互从而实现前后端数据的交互。而axios作为一个基于Promise的HTTP客户端,已经成为前端开发中最常用的HTTP请求工具之一。下面是Vue3前端使用axios调用后端接口的实现方法攻略: 1. 安装axios 使用npm可以很容易地安装axios,只需要在项目根目录下运行以下命令即可: np…

    Vue 2023年5月27日
    00
  • vue 在服务器端直接修改请求的接口地址

    为了实现“vue 在服务器端直接修改请求的接口地址”,我们需要将客户端(浏览器端)和服务器端的配置进行调整。具体的步骤如下: 1. 在客户端(浏览器端)进行配置 首先,在 vue.config.js(如果没有则需要创建) 中配置 devServer 选项: module.exports = { devServer: { proxy: { // 将URL中的 …

    Vue 2023年5月28日
    00
  • vue3.0+vue-router+element-plus初实践

    下面是 “Vue3.0 + Vue Router + Element Plus初实践” 的完整攻略: 1. 安装Vue3.0 可以在终端中使用以下命令安装Vue3.0: npm install vue@next 注意,”@next” 表示安装的是Vue3.0版本。 2. 安装Vue Router 可以在终端中使用以下命令安装Vue Router: npm i…

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