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也没什么可说的,官网都是一笔带过。




相关文章
|
15天前
|
JavaScript
vue中watch的用法
vue中watch的用法
|
7天前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
7天前
|
JavaScript
vue项目中使用vue-router进行路由配置及嵌套多级路由
该文章详细说明了如何在Vue项目中配置和使用vue-router进行单页面应用的路由管理,包括设置嵌套路由和实现多级路由导航的示例。
vue项目中使用vue-router进行路由配置及嵌套多级路由
|
3天前
|
JavaScript
vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
12 4
|
3天前
|
JavaScript
vue尚品汇商城项目-day07【51.路由懒加载】
vue尚品汇商城项目-day07【51.路由懒加载】
13 4
|
3天前
|
JavaScript
vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
9 2
|
4天前
|
API UED
如何实现Vue2项目升级Vue3?
如何实现Vue2项目升级Vue3?
12 1
|
7天前
|
JavaScript
vue项目中引入阿里图标iconfont
该文章指导如何在Vue项目中引入并使用阿里图标库Iconfont,包括图标的选取、下载配置文件及在项目中引入和使用图标的具体步骤。
|
15天前
|
JavaScript 前端开发
Vue项目使用px2rem
Vue项目使用px2rem
|
4天前
|
API UED
升级 Vue3 后,项目的打包体积会有什么变化?
升级 Vue3 后,项目的打包体积会有什么变化?
9 0
下一篇
无影云桌面