9***@qq.com
9***@qq.com
  • 发布:2019-04-28 18:13
  • 更新:2022-02-08 12:46
  • 阅读:27442

uniAPP修改data里的数据,视图没有同步是怎么回事呀?

分类:uni-app

Chrome里视图能同步更新,但是微信开发者工具,安卓和ios手机都没有及时更新。

2019-04-28 18:13 负责人:无 分享
已邀请:
9***@qq.com

9***@qq.com (作者) - air

vue中用于视同更新的方法,在uni-app中一点用都没有,这么大的bug没人处理,真无语了

  • 5***@qq.com

    我也遇到扫码完成后数据没法刷新,我做了一个空白页面,扫码完成后先跳转到空白页面,再从空白页面跳回来,配合onshow生命周期函数实现数据刷新


    2020-06-02 23:38

z***@gmail.com

z***@gmail.com

开发微信小程序,我也遇到了视图不刷新的问题,网上找了一个解决办法:
在不刷新的视图外边包裹一层template(view也可)

<template v-if="update">  
    <view>老子就是不刷新~</view>  
</template>  
<view @click="refresh">refresh</view>  
  
data(){  
    return {  
        update: true,  
    }  
},  
methods:{  
    refresh(){  
        // 解决view视图不实时刷新的问题  
	this.update=false;  
	setTimeout(()=>{  
		this.update=true;  
	},0)  
    }  
}
9***@qq.com

9***@qq.com (作者) - air

用watch监听data中的变化,一切正常。但视图就是死活不更新。坑好大呀。

  • Dircex

    现在解决了吗 ,求教踩坑前人


    2019-11-01 14:43

此词

此词

用这个方法可以解决微信小程序以及app中的页面数据更新动态绑定问题
l
this.$mp.page.setData({
data:"changedata"
})

9***@qq.com

9***@qq.com (作者) - air

获取过数据,界面还是之前的,没有更新呀。
把界面设置成启动页测试没问题,从其他界面跳转过来之后,就没反应了,像卡死一样,但请求的数据正常,视图绑定不上。
this.$forceUpdate();执行这个,一样没效果

6***@qq.com

6***@qq.com

找到问题了,还是学习不到家,this对象变了

  • HealerLZH

    可以解答一下吗,也遇到这个问题。this指向谁了


    2019-06-15 20:08

  • 9***@qq.com (作者)

    这是跳转到一个新的界面呀,this对象是不会有问题的。单独调试这个界面视图是同步的,从其他界面跳转过来,视图就不更新了。


    2019-07-05 16:33

  • 6***@qq.com

    不知道你们遇到的是什么原因,我遇到的是确实是this的问题


    2020-09-10 09:29

  • 嗨哆嚒

    回复 6***@qq.com: 不是,我前几天还正常的,也没人碰它,突然就不刷新了。


    2020-09-14 10:10

  • 6***@qq.com

    回复 嗨哆嚒: 原谅我不知道该怎么回答你的问题


    2020-09-22 09:11

  • 嗨哆嚒

    回复 6***@qq.com:可能是版本更新的问题,我给每项单独加一个动态的key之后可以了


    2020-09-22 14:15

细数烟雨

细数烟雨

在方法执行前,先把this定义出来,就可以了。
let that = this;
使用that赋值。

  • 9***@qq.com

    H5使用此方法可以将视图刷新,其他小程序端还没尝试


    2020-06-29 19:09

  • zhouovo

    直接用箭头函数不是更方便嘛


    2020-10-18 08:13

小野心

小野心 - 小野心 • 改命神器 https://m.xiaoyexin.com

一样出现这个问题。
楼主解决这个问题了吗

data() 定义了一个title,onload成功获取并正确赋值,也console.log成功,但是页面就是不显示

1***@163.com

1***@163.com - 6789

用$set试一下

  • 小野心

    老兄,这个不行 this.$set 会出错,请问正确的写法是什么

    index.umd.min.js:1 [system] TypeError: Cannot use 'in' operator to search for '我打算加盟' in test

    at VueComponent.set [as $set]


    2019-05-16 16:17

DCloud_UNI_FXY

DCloud_UNI_FXY

贴代码,贴环境,学会正确的提问题

  • Dircex

    Reset(){  
    // // #ifdef APP-PLUS
    // this.$set(selectNum, 0);
    // // #endif
    // // #ifndef APP-PLUS
    // this.selectNum = 0;
    // // #endif
    this.cateList.map(item=>{
    item.etCourseScreenOptionPOList.map(items=>{
    items.hover = false
    })
    })
    this.selectNum = 0;
    },

    这是代码 真机上 数组状态可以在视图体现 ,selsctNum无法刷新


    2019-11-01 14:45

6***@qq.com

6***@qq.com

一样的,我也有这个问题
Mac,用的cli

9***@qq.com

9***@qq.com (作者) - air

大家快来看,uni-app中写的小程序,dom元素都出现了,视图竟然没出现,在Android和ios手机上测试,也是数据和视图不同步,这么大的bug,无语了。

  • 5***@qq.com

    老哥,你倒是贴下代码啊


    2019-07-08 17:54

3***@qq.com

3***@qq.com

解决方案:

关于页面栈中getCurrentPages()方法,H5和微信小程序的不同表现
http://ask.dcloud.net.cn/article/35950

微信小程序中返回的是微信小程序页面栈,
其里面有一个$vm,才是真实的页面栈。

g***@126.com

g***@126.com

请问问题解决了吗

落花时节

落花时节 - 90后

我也遇到问题了,父组件传进来的 {},然后在子组件中 动态增加了一个属性,无论是直接增加 还是 $set 在 网页中都没问题,放到了 小程序中,视图就不能响应了,。。。。。。。

  • 落花时节

    貌似在子组件中 不管如何修改数据,都没法响应到父组件中,只能在父组件中修改。。。


    2019-09-20 14:14

8***@qq.com

8***@qq.com

看一下代码有没有隐藏错误吧,chrome下调试没报错,也没问题,但是app下就是不行,后来才发现在computed里面有个在data里面没预定义的属性导致

Dircex

Dircex - 练习时长两年半的前端练习生

Reset(){  
				this.selectNum = 0;  
				console.log(this.selectNum);  
				this.cateList.map(item=>{  
					item.etCourseScreenOptionPOList.map(items=>{  
						items.hover = false  
					})  
				})  
			},

chrom调试可以 真机有问题
数组里的状态在视图上可以刷新 selectNum不能刷新

9***@qq.com

9***@qq.com (作者) - air

直接给数组赋值,视图没有同步刷新,微信小程序和真机运行都是这个问题
this.newsitems[status]=this.randomfn(res.data.data, status);

  • 9***@qq.com (作者)

    换成set就好了


    2019-12-11 17:49

  • Dircex

    回复 9***@qq.com: 你现在使用$set 可以了吗


    2019-12-12 09:14

  • 前端学习者

    回复 Dircex: 请问你实现了吗?我要给循环的列表,单个列表做显示隐藏,使用$set,视图也不更新


    2019-12-26 23:05

  • Dircex

    回复 前端学习者: setTimeout 处理了下可以了 你试试 不行就没有了


    2019-12-27 16:35

7***@qq.com

7***@qq.com

// 在子组件中同样的问题,我想给子组件中的第一项设置一个新属性,用了this.$set,打印出来tmplist的第一项是有isSelected属性的。但是页面上还是undefined
created() {
this.tmpList = [...this.list];
let firstItem = this.tmpList[0];
// 默认让第一个选中
setTimeout(() => {
this.$set(firstItem, 'isSelected', true);
this.$forceUpdate();
console.log(this.tmpList)
}, 0);
}

最菜的韭菜

最菜的韭菜

也遇到了,$set,和$forceUpdate()都没效果

1***@qq.com

1***@qq.com

我看你们的问题,经常都是要设置的值为true和false。解决的方法为把要改变的值改成字符串,亲测可用,望采纳

1***@qq.com

1***@qq.com

如果调用的是uni的api方法

比如 uni.chooseLocation()这里改变了this的指向

所以解决方法就是在它外面定义一个this变量

1***@qq.com

1***@qq.com

2020年9月30还没解决,真是后悔用uniapp了

  • chenli

    使用uni-app应该有上几w人,如遇到问题,建议新建个帖,贴出可复现的相应代码或示例工程!


    2020-09-30 11:07

2***@qq.com

2***@qq.com

uniapp、vue 中data 数组更新后页面不同步动态渲染更新

https://blog.csdn.net/crxk_/article/details/107449261

这个可以解决

  • 1***@qq.com

    对呀,组件不同步,好恶心啊


    2020-10-29 16:10

  • 1***@qq.com

    没效果$set我试过,vue可以,uniapp的组件死活不行


    2020-10-29 16:11

3***@qq.com

3***@qq.com

我说下我的情况:
我在子组件调用getApp().globalData的公共变量,调接口的函数是写在app.vue里的公共函数,读完接口设置变量,能打印出来,视图不更新,上面两种set都不行,this.$forceUpdate()不行,我试的解决办法是
我用在computed里的就不更新,我把它写在data里,指向getApp().globalData就更新了视图

7***@qq.com

7***@qq.com

这个一般是this指向问题,用箭头函数应该能解决

该问题目前已经被锁定, 无法添加新回复