Vue项目上this.$set的用法

简介: 本篇文章主要讲解Vue项目中,this.$set这个api的用法.


本篇文章主要讲解Vue项目中,this.$set这个api的用法.

我们都知道当Vue的data里边声明的对象,如果向对象中添加新的属性,更新此属性的值,视图是不会更新的。官方是这么说的

因为 Vue 无法探测普通的新增 property 比如:

this.myObject.newProperty = 'hi'

这个时候,我们就需要使用set api,这个api就是像响应式对象中添加一个 property,并确保这个新 property 同样是响应式的,且触发视图更新。下面我们看看官方对这个api的说明:

Vue.set( target, propertyName/index, value )

  • 参数:
  • {Object | Array} target 要更改的数据源(可以是一个对象或者数组)
  • {string | number} propertyName/index 要更改的具体数据 (索引)
  • {any} value 重新赋的值
  • 返回值:设置的值。

我们怎么使用呢?下面是一段代码,点击按钮,把list第一个值改变,

<template>
  <div id="app">
    <div>{{ list }}</div>
    <button @click="changeVal">改变值</button>
  </div>
</template>
<script>
export default {
  name: "App",
  data() {
    return {
      list: [
        {
          id: 1,
          name: "用户中心"
        },
        {
          id: 2,
          name: "首页"
        }
      ]
    };
  },
  methods: {
    changeVal() {
      this.list[0] = {
        id: 2,
        name: "改变后"
      };
      console.log(this.list);
    }
  }
};
</script>
<style></style>

我们控制台看,实际上data里面的值已经改变,但是视图的值依然是没有变,这只是个简单的例子,我相信实际项目上肯定会有这种需求。

image.png

这种情况怎么办,这时,set这个api就用到了。我们改造下changeVal方法。

changeVal() {
  this.$set(this.list, 0, {
    id: 2,
    name: "改变后"
  });
  console.log(this.list);
},

再次看控制台和界面

image.png

视图已经改变,上面这个例子是改变属性,没有新增,新增属性也是一个道理,因为新增的属性,Vue是无法探测的,如果新增属性,用法和上面一样。


image.png


就到这里了,这个api也没什么可说的,官网都是一笔带过。




相关文章
|
2月前
|
JavaScript 容器
乾坤qiankun框架搭建 主应用为vue3的项目。
乾坤qiankun框架搭建 主应用为vue3的项目。
187 2
|
1月前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
25天前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
30 3
【C++】map、set基本用法
|
1月前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
2月前
|
JavaScript
如何在 Vue 项目中选择合适的模块格式
【10月更文挑战第20天】选择合适的模块格式需要综合考虑多个因素,没有一种绝对正确的选择。需要根据项目的具体情况进行权衡和分析。在实际选择过程中,要保持灵活性,根据项目的发展和变化适时调整模块格式。
21 7
|
1月前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
2月前
|
JavaScript 前端开发 编译器
在 Vue 项目中使用 ES 模块格式的优点
【10月更文挑战第20天】在 Vue 项目中使用 ES 模块格式具有众多优点,这些优点共同作用,使得项目能够更高效、更可靠地开发和运行。当然,在实际应用中,还需要根据项目的具体情况和需求进行合理的选择和配置。
37 6
|
1月前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
2月前
|
JavaScript
Vue 中mixin 的用法
【10月更文挑战第18天】Vue 中mixin 的用法
35 3
|
2月前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
78 3
下一篇
DataWorks