您的当前位置:首页正文

关于uni-app中请求获取到数据,但无法渲染、无法赋值。或可以渲染,但无法赋值、取值。其原因是this指向问题

2024-11-25 来源:个人技术集锦

一、关于uni-app中请求获取到数据,但无法渲染,微信开发工具AppData中没有数据的问题,this指向问题

从图中可以看出,这个goodsList的数据是可以取到的,但是在AppData中没有看到记录,并且使用vue中的v-for指令循环数据时也没有渲染。

success(res) {	
	console.log(res)
	//这里的this,指向的是当前的res对象,故这样子写,是无法将值赋给goodsList的
	this.goodsList = res.data
},
fail(err) {
	uni.showToast({
		title:"请求失败...",
		icon:"none"
	})
	console.log(err)
}

正确示例:

success: res=>{
	console.log(res)
	//这里的this指向的是当前页面实例,也就可以拿到data()中定义的goodsList,这时再看AppData中就会有数据了,这里可以参考图一中的types
	this.goodsList = res.data
},
fail: err=>{
	uni.showToast({
		title:"请求失败...",
		icon:"none"
	})
	console.log(err)
}

二、关于uniapp中渲染数据,但this.goods报错Cannot read property ‘goods’ of undefined的相关问题

错误代码及问题原因:

success(res) {
	if(res.statusCode != 200){
		uni.showToast({
			title:"请求数据失败,请稍后重试...",
			icon:"none"
		})
		return ;
	}
	console.log(res.data);	//这里有数据
	//错误的原因:还是this的指向问题,这里的this指向的是res对象
	this.goods = res.data;	//这里报错
	console.log(this.goods);	//还里也报错
}

正确示例:

success: res=>{
	if(res.statusCode != 200){
		uni.showToast({
			title:"请求数据失败,请稍后重试...",
			icon:"none"
		})
		return ;
	}
	console.log(res.data);	
	this.goods = res.data;	//这里的this就指向的是当前页面的实例
	console.log(this.goods);	//也就可以拿到data中的数据了
}

总结:

在普通函数中,this指向的是调用该函数的对象,function(obj){} 中的obj对象,而在箭头函数中this则指向的是当前的上下文。
这两次的错误提示都是不一样的,但是,错误的原因都是this指向的问题,所以在vue的开发中需要注意this的指向问题。

显示全文