vue如何修改data中数据问题

目录
  • vue修改data中数据
    • vue中修改简单类型数据
    • vue中修改数组的方法
    • vue中修改对象的方法
    • 关于删除
  • vue修改数据不生效,页面不刷新
    • vue中数据类型
    • vue数据侦听简易理解
    • 数据更新后,页面不刷新的可能原因

vue修改data中数据

vue的data中保存一些数据,用于页面的渲染。有的时候,当我们手动对data中的数据修改时,vue却监听不到这些数据的变化,导致页面没有触发新一轮的更新。

注意:出现以上问题的原因在于,没有通过vue提供的方法对保存在data中的数据进行修改。强制性通过js对数据修改的那些方法,有一部分在vue中是不被认可的。

vue中修改简单类型数据

简单类型的数据,包括number boolean bigInt string 等

修改这类型的数据,我们可以直接赋值,vue也能监听到数据发生的变化,然后作出修改。

xxxx表示变量名,yyyy则是要赋值的新值。

this.$data.xxxx = yyyy
或
this.xxxx = yyyy

vue中修改数组的方法

一、变异方法(7个):push ,shift, unshift, pop, sort, splice, reverse

这些方法在与js基本一致(推荐)

  • push:此方法是在数组的后面添加新加元素,此方法改变了数组的长度
  • pop:此方法在数组后面删除最后一个元素,并返回数组,此方法改变了数组的长度
  • shift:此方法在数组后面删除第一个元素,并返回数组,此方法改变了数组的长度
  • unshift:此方法是将一个或多个元素添加到数组的开头,并返回新数组的长度
  • splice:Array.splice(开始位置, 删除的个数,替换的元素) 万能方法,可以实现增删改
  • sort:该方法用于对数组进行排序
  • reverse:该方法用于将数组的内容倒置

二、set方法(推荐)

this.set 这是 vue 实例调用 set 这是vue实例调用set这是vue实例调用set()方法,专门用来修改数组的

  • 第一个参数,已经存在data中的数据,要被修改的数组
  • 第二个参数,要修改的数组下标
  • 第三个参数,要修改的数组对应下标的值
this.$set (this.selectedarr, index, option)
data() {
    return {
        textArray: ["1","2","3"]
    }
}

修改最后一个为"4"

this.$set (this.textArray, 2, "4")

三、用一个全新的数组替换原先的数组,而不是在原先数组上修改(不推荐)

data() {
    return {
        textArray: ["1","2","3"]
    }
}

修改最后一个为"4"

this.textArray = ["1","2","4"]

简单总结一下,这三种修改数组的方法,最后一种不推荐,因为这会引起vue中整个数组数据对应的页面重新渲染,而我们明明只想改变数组中的某一个元素。

vue中修改对象的方法

一、方法直接改(如果对象数据过于复杂,层次很深的话,不推荐)

this.obj.dengxi = 'dengxi' 

二、使用vue的实例提供的方法进行操作(推荐,vue监听了这个方法,做到更好的更新渲染)

this.$set(vm.obj,'dengxi','dengxi好帅')

三、通过vue构造函数提供的方法来改变(推荐,这个其实和第二种方法一样)

Vue.set(this.obj,'dengxi','dengxi真的好帅')

关于删除

如果想要将对象中的某一个键值对应的value删掉

一、可以通过上面的三种方法,将其设置为空(推荐,粗暴简单,但有效)

this.obj.dengxi = null

二、vue实例提供的删除方法(推荐)

this.$delete(this.obj,'yangxi')

三、vue构造函数提供的方法(其实和第二种一样,推荐)

Vue.delete(this.obj,'dengxi')

四、创建一个新对象,覆盖之前的对象,vue仍能实现更新(不推荐)

this.obj = {....}

vue修改数据不生效,页面不刷新

vue中数据类型

包括:基本类型,对象,数组

vue数据侦听简易理解

在vue2中,是通过Object.definedPropety()来进行数据代理。

我们配置在const vm = new Vue({})中的deta会变成 vm自身上的属性,也会存在于vm._data中,此时data中对应的每一个属性都会有getter和setter,数据改变后模板重新解析,就依赖于setter对数据的侦听。

从上图黑色部分可以看到,age是对象,hobbies是字符串数组,friends是对象数组,他们本身都有getter和setter来实现响应式。

1、类型为基本数据类型:

此时,该属性在vm上有直接的getter和setter,可以直接修改

vm.name="xiaoming"

2、类型为对象

此时对象的每个属性都有对应个getter和setter,也可以实现响应式

 3、类型为数组

在js中,想要操作数组中的某个元素,我们可能会通过索引来操作,然而,从截图中,我们发现没有对应元素索引值的getter和setter方法,因此我们再通过数组索引值修改数据,就不会触发模板解析,从而就不会刷新页面。

数据更新后,页面不刷新的可能原因

1. 初始化时data中不存在该属性

通过 vm.xxx=yyy / vm.xxx.yyy="abc"方式添加,该属性为非响应式。想要添加响应式数据,需要借助vue提供的set方法:

Vue.set(vm.xxx, 'yyy', 'zzz')  

或者

vm.$set(vm.xxx, 'yyy', 'zzz')

也可以在初始化时的data数据中添加目标属性

注意:data中是不可直接用Vue.set()方式添加属性的 即 Vue.set(vm, 'yyy', 'zzz')  或者  vm.$set(vm, 'yyy', 'zzz')是不合法的,控制台会报错,我们只能往已存在的属性中增加属性。

2. 通过索引值修改数组元素

错误方式:

vm.hobbies[0]='上班'
vm.friends[0]={name:'henmeimei',age=”19”}

正确修改方式:

通过数组的pop(末尾删除)/push(末尾添加)/shift(开头删除)/unshift(开头添加)/reverse(反转)/sort(排序)/splice(起始位置,删除数量,插入元素)方法操作

Vue.set(vm.items, indexOfItem, newValue)     
vm.$set(vm.items, indexOfItem, newValue)

通过其他方式(filter/map/...)修改数组,并重新赋值给原数组

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue 解决computed修改data数据的问题

    最近在做项目的时候遇见一个问题,computed修改data数据的时候会报错.报错的大概意思是,不可以修改data数据的属性值.查了一些答案,最终解决办法是需要用到set和get.看代码: data () { return { fold: false } } 我想修改fold的值,如果不用get和set就会报错!!! computed:{ listShow: { get: function () { if (!this.totalCount) { return false } return th

  • vue 修改 data 数据问题并实时显示的方法

    首先,定义一个变量: (以下以本人写的为例) 首先定义一个变量: 然后,给变量赋值: 如果想要修改数据,主要代码如下: 然后界面上要记得绑定数据id: 就Ok了. 拓展知识:Vue刷新修改页面中的数据方法 因为Vue对象一旦生成之后,如果只是修改Vue对象中的数据,在页面上是不会自动更新的,得用Vue.set()函数来进行修改,函数格式为Vue.set(data,'para','value'),其中data为Vue创建时传输的data对象名,后面两个参数分别是data对象中的变量名称与值 页面初

  • vue如何修改data中的obj数据的属性

    目录 修改data中的obj数据的属性 修改data以实现数据响应式 怎么保证你的变化我Vue能监听到? 如果初始值没给这个变量Vue还能监听吗? 修改data中的obj数据的属性 //方法一 var obj = this.obj; obj.name = 'long'; this.obj = obj; //方法二 Vue.set(this.obj, "password", "num"); //part1,要修改的obj对象; //part2,要添加或者修改的属性;

  • vue 修改 data 数据问题并实时显示操作

    首先,定义一个变量: (以下以本人写的为例) 首先定义一个变量: 然后,给变量赋值: 如果想要修改数据,主要代码如下: 然后界面上要记得绑定数据id: 就Ok了. 补充知识:vue data中数组以及对象 属性改变时不能及时反馈到视图中问题的解决方式 1.vue 对数组更新检测 的机制又很明确的说明: 变异方法:Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新. 这些方法如下: push() pop() shift() unshift() splice() sort() rever

  • vue如何修改data中数据问题

    目录 vue修改data中数据 vue中修改简单类型数据 vue中修改数组的方法 vue中修改对象的方法 关于删除 vue修改数据不生效,页面不刷新 vue中数据类型 vue数据侦听简易理解 数据更新后,页面不刷新的可能原因 vue修改data中数据 vue的data中保存一些数据,用于页面的渲染.有的时候,当我们手动对data中的数据修改时,vue却监听不到这些数据的变化,导致页面没有触发新一轮的更新. 注意:出现以上问题的原因在于,没有通过vue提供的方法对保存在data中的数据进行修改.强

  • Vue刷新修改页面中数据的方法

    因为Vue对象一旦生成之后,如果只是修改Vue对象中的数据,在页面上是不会自动更新的,得用Vue.set()函数来进行修改,函数格式为Vue.set(data,'para','value'),其中data为Vue创建时传输的data对象名,后面两个参数分别是data对象中的变量名称与值 页面初始化代码: <script type="text/javascript" charset="utf-8"> mui.init(); var data = { dx:

  • Vue中避免滥用this去读取data中数据

    前言 在Vue中,data选项是个好东西,把数据往里一丢,在一个Vue组件中任何一个地方都可以通过this来读取data中数据.但是要避免滥用this去读取data中数据,至于在哪里要避免滥用,如果滥用会导致什么后果,本专栏将会一一揭晓. 一.用this读取data中数据的过程 在Vue源码中会把data中数据添加getter函数和setter函数,将其转成响应式的.getter函数代码如下所示: function reactiveGetter() { var value = getter ?

  • vue 实现根据data中的属性值来设置不同的样式

    style动态赋值 margin-top的值 根据choosePaperFlag的值来设置 利用三元表达式 补充知识:vue 条件判断绑定内联样式 当需要判断条件来绑定内联样式时 可以三元运算符判断,然后绑定一个对象 :style="!areaCode || !phoneNumber || !receivedCode || !verification ? '{backgruond:#ccc}' : $store.state.store.config.background" 以上这篇vu

  • vue基础之data存储数据及v-for循环用法示例

    本文实例讲述了vue data存储数据及v-for循环用法.分享给大家供大家参考,具体如下: vue data里面存储数据 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>www.jb51.net vue data里面存储数据</title> <style> </style> &l

  • vue如何在data中引入图片的正确路径

    目录 在data中引入图片正确路径 1.通过import引入路径才行 2.通过require更方便 3.在ui上直接动态也要通过require vue引入图片路径问题 方法一 方法二 在data中引入图片正确路径 今天踩的坑给分享出来. 本来想要在横版遍历图片出来在vue中自己做轮播,结果发现在data中直接引入路径是渲染不出来的. 原因是webpack打包无法解析 1.通过import引入路径才行 如果直接在模板上通过src="../../assets/images/top5.png"

  • vue实现修改标签中的内容:id class style

    目录 vue修改标签的内容:id class style v-bind,v-model注意 动态改变class和style的一些方法 使用$event 下面的函数处理 vue修改标签的内容:id class style v-bind,v-model注意 v-bind动态绑定指令,默认情况下标签自带属性的值是固定的,在为了能够动态的给这些属性添加值,可以使用v-bind:你要动态变化的值=“表达式” v-bind用于绑定属性和数据 ,其缩写为“ : ” 也就是v-bind:id === :id v

  • vue中如何让子组件修改父组件数据

    一.关于vue中watch的认识 我们要监听一个属性的的变化就使用watch一般是父组件传递给子组件的时候 •1.常见的使用场景 ... watch:{ value(val) { console.log(val); this.visible = val; } } ... •2.如果要一开始就执行 ... watch: { firstName: { handler(newName, oldName) { this.fullName = newName + '-' + this.lastName;

随机推荐