uniapp $set使用指南

一、$set的作用和语法结构

$set是uniapp框架提供的一种方法,可以对data中的数据进行修改和更新。$set的语法结构如下:

Vue.set(object, key, value)或vm.$set(object, key, value)

其中object必填,是要修改的对象;key必填,是对象中要修改或更新的属性名;value必填,是属性的新值。

二、$set的常见应用场景

在vue.js的开发中,可以通过直接对data中的数据进行修改来实现对视图的更新,但当需要修改或更新对象中某个属性的时候,如果直接对属性进行修改,vue.js无法监测到数据的变化,也就无法触发视图更新。这时就需要使用$set方法来通知vue.js数据改变了,视图需要更新。下面是$set的常见应用场景。

1、通过数组下标更新数组数据

如果需要修改数组中的某个元素,可以通过数组下标来更新数组数据。例如,有一个tasks数组,需要将第一个任务的状态由未完成改为已完成,可以使用以下代码实现:

this.tasks[0].status = 'completed';

上面的代码可以更新数据,但是vue.js无法检测到数据的变化,这时就需要使用$set来通知vue.js更新数据。代码如下:

this.$set(this.tasks[0], 'status', 'completed');

这样vue.js就能检测到数据的变化,触发视图的更新。

2、通过对象属性名更新对象数据

如果需要修改对象中的某个属性,也可以使用$set来触发视图更新。例如,有一个person对象,需要将其年龄属性值改为20,可以使用以下代码实现:

this.person.age = 20;

同样,这样修改数据vue.js也无法检测到数据变化,需要使用$set方法来通知vue.js更新数据。代码如下:

this.$set(this.person, 'age', 20);

三、$set的高级操作——监听对象属性的新增与删除

除了可以对已有属性进行修改和更新,$set方法还支持监听对象属性的新增和删除。这一功能对于实现动态表单、涉及到属性的动态添加和删除的组件非常有用。

1、新增属性

如果需要给对象新增一个属性,并且希望vue.js能够监测到新增的属性,可以使用$set方法。例如,有一个person对象,需要新增一个地址属性,可以使用以下代码实现:

this.$set(this.person, 'address', '');

这样新增属性就可以被vue.js监测到,从而使得视图更新。

2、删除属性

如果需要删除对象中的某个属性,同样可以使用$set方法。例如,有一个person对象,需要删除其地址属性,可以使用以下代码实现:

this.$set(this.person, 'address', undefined);

这样操作会使得地址属性变为undefined,但是vue.js依然会监测到属性的删除,使得视图更新。

四、$set的注意事项

$set虽然非常实用,但是在使用过程中也需要注意一些问题,防止出现不必要的错误和问题。

1、避免在模板中使用$set

虽然$set方法可以帮助我们实现动态数据的更新,但是在模板中使用$set是非常不推荐的。在模板中可以直接使用data中的数据和方法,可以不必使用$set。如果需要在组件中进行动态数据更新,可以借助computed、watch和props等特性来实现。

2、避免在computed属性中使用$set

在computed计算属性中,如果使用$set方法进行数据更新,会导致无限循环的问题。因为computed属性的值是基于data中的其他属性计算的,如果在computed中使用$set方法,则会让computed属性的值发生变化,从而引起重新计算,这样就形成了循环调用。

3、$set无法监控属性名的变化

$set方法只能监听对象属性值的变化,无法监听属性名的变化。比如,如果一个对象中的属性名称发生了变化,$set方法是无法监测到这一变化,并且也无法触发组件的更新。所以在修改属性名时,需要手动删除原有属性并在对象中添加一个新的属性,从而实现属性名的修改和更新。

五、$set的实例应用

下面是一个$set的实例应用,代码中实现了一个待办事项的功能,支持添加任务、修改任务状态和删除任务。

1、模板中的代码

<template>
  <div class="task-list">
    <h3>待办事项</h3>
    <ul>
      <li v-for="(task, index) in tasks" :key="index">
        <input type="checkbox" v-model="task.status">
        <span :class="{ completed: task.status }" v-text="task.title"></span>
        <i class="iconfont icon-delete" @click="deleteTask(index)"></i>
      </li>
    </ul>
    <form @submit.prevent="addTask">
      <input type="text" v-model="newTaskContent">
      <button type="submit">添加任务</button>
    </form>
  </div>
</template>

2、script中的代码

<script>
export default {
  data () {
    return {
      tasks: [
        { title: '吃饭', status: true },
        { title: '睡觉', status: false },
        { title: '打豆豆', status: false }
      ],
      newTaskContent: ''
    }
  },
  methods: {
    addTask () {
      if (this.newTaskContent.trim() !== '') {
        this.tasks.push({
          title: this.newTaskContent,
          status: false
        })
        this.newTaskContent = ''
      }
    },
    deleteTask (index) {
      this.tasks.splice(index, 1)
    }
  }
}
</script>

3、style中的代码

<style scoped>
.task-list {
  margin: 20px auto;
  padding: 20px;
  box-shadow: 0 0 10px rgba(0,0,0,.1);
}
.task-list h3 {
  font-size: 24px;
  margin-bottom: 20px;
}
.task-list ul {
  list-style: none;
  padding: 0;
}
.task-list li {
  display: flex;
  align-items: center;
  margin-bottom: 10px;
  font-size: 18px;
}
.task-list input[type="checkbox"] {
  margin-right: 10px;
}
.task-list span.completed {
  text-decoration: line-through;
  color: #999;
}
.task-list i {
  margin-left: auto;
  cursor: pointer;
  font-size: 18px;
}
.task-list form {
  margin-top: 20px;
}
.task-list input[type="text"] {
  padding: 5px 10px;
  font-size: 18px;
  margin-right: 10px;
  border: none;
  border-bottom: 1px solid #999;
  outline: none;
}
.task-list button {
  padding: 5px 10px;
  font-size: 18px;
  background-color: #00bcd4;
  color: #fff;
  border: none;
  outline: none;
  cursor: pointer;
}
</style>

在这个例子中,我使用了$set方法来更新任务的状态,确保vue.js能够检测到数据变化从而更新视图。

this.$set(this.tasks[index], 'status', !this.tasks[index].status)

原创文章,作者:VBWEM,如若转载,请注明出处:https://www.506064.com/n/331890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
VBWEMVBWEM
上一篇 2025-01-20 14:10
下一篇 2025-01-20 14:10

相关推荐

  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • wzftp的介绍与使用指南

    如果你需要进行FTP相关的文件传输操作,那么wzftp是一个非常优秀的选择。本文将从详细介绍wzftp的特点和功能入手,帮助你更好地使用wzftp进行文件传输。 一、简介 wzft…

    编程 2025-04-29
  • Python Set元素用法介绍

    Set是Python编程语言中拥有一系列独特属性及特点的数据类型之一。它可以存储无序且唯一的数据元素,这使得Set在数据处理中非常有用。Set能够进行交、并、差集等操作,也可以用于…

    编程 2025-04-29
  • Fixmeit Client 介绍及使用指南

    Fixmeit Client 是一款全能的编程开发工具,该工具可以根据不同的编程语言和需求帮助开发人员检查代码并且提供错误提示和建议性意见,方便快捷的帮助开发人员在开发过程中提高代…

    编程 2025-04-29
  • Open h264 slic使用指南

    本文将从多个方面对Open h264 slic进行详细阐述,包括使用方法、优缺点、常见问题等。Open h264 slic是一款基于H264视频编码标准的开源视频编码器,提供了快速…

    编程 2025-04-28
  • mvpautocodeplus使用指南

    该指南将介绍如何使用mvpautocodeplus快速开发MVP架构的Android应用程序,并提供该工具的代码示例。 一、安装mvpautocodeplus 要使用mvpauto…

    编程 2025-04-28
  • Python mmap共享使用指南

    Python的mmap模块提供了一种将文件映射到内存中的方法,从而可以更快地进行文件和内存之间的读写操作。本文将以Python mmap共享为中心,从多个方面对其进行详细的阐述和讲…

    编程 2025-04-27
  • Python随机函数random的使用指南

    本文将从多个方面对Python随机函数random做详细阐述,帮助读者更好地了解和使用该函数。 一、生成随机数 random函数生成随机数是其最常见的用法。通过在调用random函…

    编程 2025-04-27
  • Python set去重保留原顺序

    当一个列表中出现重复的元素时,为了去除这些重复元素可以使用Python提供的集合(set)数据结构,集合可以去除元素的重复出现。然而,这样会导致原有的元素顺序混乱,这时,需要使用一…

    编程 2025-04-27
  • RabbitMQ Server 3.8.0使用指南

    RabbitMQ Server 3.8.0是一个开源的消息队列软件,官方网站为https://www.rabbitmq.com,本文将为你讲解如何使用RabbitMQ Server…

    编程 2025-04-27

发表回复

登录后才能评论