vue.set this.$set的作用

news/2024/11/17 0:04:24/

Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法

当一个对象在vue中是响应式的,如果仅仅使用普通的方式向这个对象添加或修改这个属性的值,是不会触发视图更新的

但是使用 vue.set 或者 this.$set 的方式可以使得新添加的属性也是响应式的,并触发视图更新
例如:

通过Vue.set处理通过数组下标修改数组属性值时,页面不渲染问题

需求: 在列表里要通过按钮的点击控制手机号码列是显示正常的号码还是显示星号******

首先想到的实现方式就是给表格的每条数据增加一个 showFlag 属性,showFlag:true 显示正常的手机号,showFlag:false 显示星号*****,点击按钮就修改该条数据的showFlag的值

代码:

<template><div><divv-for="(item,index) in List":key="index"class="phone"><span v-if="item.showFlag">{{item.name}}--{{item.phone}}</span><span v-else>{{item.name}}--***********</span><button @click="changeState(index)">点我改变状态</button></div></div>
</template>

方法:

<script>
export default {//数据data() {return {List: [],}},created() {this.getList()},methods: {//显示手机号点的点击方法changeState(i) {this.List[i].showFlag = !this.List[i].showFlagconsole.log('showFlag:',this.List[i].showFlag);},//获取列表数据的方法getList() {this.List = [{ name: '小明', phone: 13579000001 },{ name: '小红', phone: 13579000002 }]this.List.map(item => {item.showFlag = trueconsole.log(item);})}},
}
</script>


这时:点击这条数据的按钮,页面显示并不会从数字变换成*****

当点击按钮1时,通过数组下标来更改 showFlag 的值成功,但是页面并没有重新渲染,模板没有被重新解析;

产生问题的原因:Vue2并不支持数组下标的响应式,也就是说Vue2检测不到通过下标更改数组的值。

解决办法:使用Vue官网提供的方法更改数组下标的值

changeState(i) {this.List[i].showFlag = !this.List[i].showFlagconsole.log(`按钮${i + 1}的 showFlag:`, this.List[i].showFlag);//增加下面这行this.$set(this.List, i, this.List[i])},

再举个例子:

需求:点击上移按钮实现div上移一个,点击下移按钮实现div下移一个

<div v-for="(item,index) in tabList"><div>{{ item.title}}</div><div class="work-item-img"><img @click="moveUp(index)" src="../../assets/w上移.png" alt="" /><img @click="moveDown(index)" src="../../assets/w/下移.png" alt="" /></div>
</div>

方法:

	data(){return {tabList: [{id: 2,title: '应用',},{id: 1,title: '统计',}],}}//上移moveUp(index) {if (index == 0) returnlet W = this.tabList[index]this.$set(this.tabList, index, this.tabList[index - 1])this.$set(this.tabList, index - 1, W)},moveDown(index) {if (index == this.tabList.length - 1) returnlet W = this.tabList[index]this.$set(this.tabList, index, this.tabList[index + 1])this.$set(this.tabList, index + 1, W)},

 

 


http://www.ppmy.cn/news/244137.html

相关文章

【存储方式】

存储方式 1. 顺序存储2. 链式存储3. 哈希存储4. 树形存储5. 关系式存储6. 分布式存储7. 对象存储结论 不同的存储方式在不同的场景下拥有各自的优势和适用性。本文将分别简单介绍七种不同的存储方式&#xff0c;包括顺序存储、链式存储、哈希存储、树形存储、关系式存储、分布式…

详解信号逻辑电平标准: CMOS、TTL、LVCMOS、LVTTL、ECL、PECL、LVPECL、LVDS、CML

Refer: (285条消息) FPGA几种电平&#xff1a;TTL&#xff0c;CMOS以及LVTTL,LVCMOS_Love coldplay的博客-CSDN博客 常用的电平标准有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232、RS485等&#xff0c;还有一些速度比较高的LVDS、GTL、PGTL、CML、HSTL、SSTL等。 供…

使用pagehelper 实现 mybatis 分页查询

通过 pagehelper实现 mybatis 分页查询 1. 添加依赖&#xff1a;2. 配置PageHelper&#xff1a;3.在代码中使用PageHelper&#xff1a;4. 获取更多分页信息&#xff1a; 1. 添加依赖&#xff1a; 首先&#xff0c;你需要在项目的pom.xml文件中添加PageHelper的依赖。具体如下&…

Java教程【01.04】Java中的static和final关键字

Java中的static和final关键字 在Java中,static和final是两个常用的关键字,用于定义类、方法和变量的特性。在本教程中,我们将学习如何使用static和final关键字以及它们的用途。 static关键字 static关键字用于创建静态成员,这意味着它们属于类本身而不是类的实例。通过使…

自定义组件中,使用onLoad,onShow生命周期失效问题

的解决方法 自定义组件中&#xff0c;使用onLoad,onShow生命周期失效问题 自定义组件中&#xff0c;使用onLoad,onShow生命周期失效问题 官方文档可查阅到&#xff1a; 页面生命周期仅在page中的vue页面有效&#xff0c;而单独封装的组件中【页面周期无效】&#xff0c;但是Vu…

echo命令在Unix中的作用以及其常见用法

在Unix系统中&#xff0c;"echo"是一个常用的命令&#xff0c;用于在终端或脚本中输出文本。它可以将指定的字符串或变量的值打印到标准输出&#xff0c;从而向用户提供信息或进行调试。 本文将详细介绍"echo"命令在Unix中的作用以及其常见用法。 基本语法…

RTX3090安装tensorflow=1.15.5-gpu版

教程如下 rtx3090搭建tensorflow1.15环境_唐僧爱吃唐僧肉的博客-CSDN博客_3090 tensorflow 结果 发现虽然能引入tensorflow,但是cuda不能用 &#xff0c;是False 输入动态引入的命令之后&#xff0c;可查看到有两块GPU,并且&#xff0c;返回True from tensorflow.python.clie…

win10 1050ti anaconda搭建tensorflow-gpu

提示&#xff1a;看此文章 大前提需要拥有NVIDIA的显卡 个人安装顺序&#xff1a;VS部分组件>CUDA>CuDNN>python>tensorflow-gpu 文章目录 前言系统环境准备如何查询NVIDIA算力 1、安装VS组件、CUDA使用conda创建虚拟环境 二、使用pycharm测试代码1.安装matplotlib…