有个vue2的问题困扰我几天了,想请教一下老师 。
来源:3-3 歌手列表固定标题实现(上)
qq_我深知你是梦丶_04338108
2021-08-05
// 1. 点击handleClick修改this.params,正常发起请求
// 2. 切换到其他路由再切换回来,mounted正常执行,但是this.params没有初始化,依然是上一次handleClick修改后的数据
// 3. 如果params参数不多的话可以直接在mounted重置,但是碰到params参数几十个的情况,mounted里再全部初始化有点太难受了。
data() {
params: {
paramA: 1,
paramB: 2,
paramC: 3
}
},
mounted() {
console.log(this.params) // paramA 11
const { params } = this;
apiXXX(params) // api请求
},
methoed: {
handleClick() {
const { params } = this;
params.paramA = 11;
apiXXX(params) // api请求
}
}
写回答
2回答
-
ustbhuangyi
2021-08-05
首先,请求参数是否一定要定义成响应式,如果只是在组件上下文共享,是否直接在 created 钩子函数中执行 this.params 的初始化。
其次,如果要保留初始化参数 params,那么在点击回调函数发送 API 之前,可以通过 const params = Object.assign({}, this.params) 拷贝它的副本(如果参数中有对象数据,那么需要执行深拷贝,可以借助 lodash 的 deepClone)。这样你就不用担心对原始数据的修改了。012021-08-05 -
ustbhuangyi
2021-08-05
首先,请求参数是否一定要定义成响应式,如果只是在组件上下文共享,是否直接在 created 钩子函数中执行 this.params 的初始化。
其次,如果要保留初始化参数 params,那么在点击回调函数发送 API 之前,可以通过 const params = Object.assign({}, this.params) 拷贝它的副本(如果参数中有对象数据,那么需要执行深拷贝,可以借助 lodash 的 deepClone)。这样你就不用担心对原始数据的修改了。00
相似问题
请问老师一个问题
回答 1