如题 uni-app在view中加上v-if判断条件v-if="obj"后view内部使用过滤器会忽略判断外层容器条件v-if自动执行filter函数, 编译到小程序端后控制台报错 TypeError: Cannot read property 'xxx' of null, 然后不使用过滤器filters,使用页面methods函数的话也是同样的问题
初始数据对象obj为null,之后会调用api接口返回数据赋值给obj, 可是一进入页面之后小程序IDE控制台就会提示报错信息:TypeError: Cannot read property 'discount' of null
HBuilderX版本: 2.6.7.20200326-alpha最新版
小程序IDE版本: v1.02.2003250最新版
github上也有类似问题但是至今仍未解决,没有官方回复 > https://github.com/dcloudio/uni-app/issues/334
<view class="detail-card" v-if="obj">
<view class="discount">
<text>折扣:</text>
<text class="num">{{ obj.discount | formatDiscount }}</text>
<text class="num">{{ formatDiscount(obj.discount) }}</text>
</view>
</view>
data() {
return {
obj: null
}
},
methods: {
formatDiscount(val){return Number(val).toFixed(2)},
async getMemberDetail() {
uni.showLoading({
title: '加载中...',
mask: true
})
const params = {
uid: this.uid
}
try {
const res = await Api.getMemberDetail(params)
console.log(res)
if (res.ret === 200) {
uni.hideLoading()
this.obj = Object.assign({}, res.data)
}
} catch (e) {
console.log(e)
uni.hideLoading()
}
}
}
5 个回复
2***@qq.com
同样的问题 即使v-if为false 但是内部的方法过滤器依然会执行
东方来客
我也碰到了。。。自我怀疑了半天,false的代码怎么回执行呢
2***@qq.com
我也遇到类似问题了,试了N种方法都不行,也不知道有没有人能回答下这个问题
东方来客
解决了
2020-06-15 10:44
1***@qq.com
应该是uniapp的一个bug,好长时间也没人管,目前我想到的是在获取数据时候来给他赋值,假如获取的是列表,获取到后先循环列表,判断v-if,如果不等于页面设定判断的值的话,给他赋值{},然后就可以了,要不让后端初始化的时候不要初始化null,初始化成{},我目前这样用是可以的
lmh_paul
uni-app框架bug,vue这样的用法是不会报错的。把使用到的这个场景的代码片段抽成一个组件能解决,但很不优雅,希望官方能解决@官方