问题描述
NavPathStack对象透传之后类型变成了普通的 Object,导致后续栈操作失效。问题场景描述:在一个 class 类中创建 NavPathStack 对象,class 中调用 router.pushUrl(NavPathStack) 透传给打开页面的 Navigation 组件,页面卡死。
- 经过测试发现只有在组件内创建 NavPathStack 对象给 Navigation 才生效。
- 断点后发现透传过来的对象变成了普通的 Object。
问题描述
NavPathStack对象透传之后类型变成了普通的 Object,导致后续栈操作失效。问题场景描述:在一个 class 类中创建 NavPathStack 对象,class 中调用 router.pushUrl(NavPathStack) 透传给打开页面的 Navigation 组件,页面卡死。
首先,我们需要理解 NavPathStack 对象在透传过程中发生了什么。由于 NavPathStack 对象在透传后变成了普通的 Object 类型,这可能导致 Navigation 组件无法正确处理该对象,进而导致页面卡死。
为了解决这个问题,我们需要确保在透传 NavPathStack 对象时保持其正确的类型。一种可能的方法是使用 JSON.stringify() 和 JSON.parse() 方法来序列化和反序列化 NavPathStack 对象。
以下是具体的代码示例:
// 在 class 类中创建 NavPathStack 对象
let navPathStack = {
// 初始化 NavPathStack 对象的属性和值
};
// 将 NavPathStack 对象转换为字符串表示
let navPathStackStr = JSON.stringify(navPathStack);
// 将字符串表示的 NavPathStack 对象透传给 Navigation 组件
router.pushUrl(navPathStackStr);
在 Navigation 组件中,我们可以使用 JSON.parse() 方法将透传过来的字符串表示的 NavPathStack 对象转换回原始对象:
// 在 Navigation 组件中接收透传过来的字符串表示的 NavPathStack 对象
let navPathStackStr = this.$route.query.navPathStack;
// 将字符串表示的 NavPathStack 对象转换回原始对象
let navPathStack = JSON.parse(navPathStackStr);
// 现在我们可以使用 navPathStack 对象进行后续操作,例如将其添加到 Navigation 组件的路径栈中
this.navPathStack = navPathStack;
通过这种方式,我们可以确保 NavPathStack 对象在透传过程中保持正确的类型,从而避免页面卡死的问题。
解决措施
代码问题,查看代码发现router 跟 Navigation 用了同一个栈,router跟Navigation 是不一样的组件,所以栈不能用同一个。已验证当router跟Navigation 栈不一样时,页面不会卡死,可以拉起页面。