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”}

正确修改方式:

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

2、Vue.set(vm.items, indexOfItem, newValue)     

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

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你是使用vue进行开发,获取数据页面没有刷新,可能是因为你没有正确地更新组件的数据Vue的响应式数据会自动更新DOM,但是只有在数据发生变化时才会触发更新。如果你获取的数据是通过异步请求获取的,需要在数据返回后手动更新组件的数据才能触发DOM的更新。 以下是一些可能导致页面刷新的原因和解决方法: 1. 没有正确地更新组件的数据 如果你获取数据后没有在组件正确地更新数据,那么页面就不会刷新。确保在数据返回后更新组件的数据,例如: ``` mounted() { axios.get('https://api.example.com/data') .then(response => { this.myData = response.data; }) .catch(error => { console.log(error); }); } ``` 这样,当数据返回后,`myData`会被更新,组件的DOM也会自动更新。 2. 没有使用响应式数据 如果你获取的数据不是响应式的,那么页面就不会刷新。确保使用Vue提供的响应式数据,例如: ``` data() { return { myData: null } }, mounted() { axios.get('https://api.example.com/data') .then(response => { this.myData = response.data; }) .catch(error => { console.log(error); }); } ``` 这样,当数据返回后,`myData`会被更新,组件的DOM也会自动更新。 3. 没有在组件使用`v-if`或`v-show` 如果你在获取数据后没有在组件使用`v-if`或`v-show`来条件渲染组件,那么即使你更新了数据页面也不会刷新。确保在组件使用`v-if`或`v-show`来显示或隐藏组件,例如: ``` <div v-if="myData"> {{ myData }} </div> ``` 这样,当`myData`被更新后,组件的DOM会自动更新。 希望这些解决方法能够帮助你解决页面刷新的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值