uni-app 页面作为组件嵌入时 props解析route失败
uni-app 页面作为组件嵌入时 props解析route失败
操作步骤:
A页面接收id属性,B页面嵌套A页面。
- 打开A页面 -》 正常显示,
- 打开B页面 -》 A组件没有获取到id属性
预期结果:
A组件获取到id属性
实际结果:
A组件没有获取到id属性
bug描述:
10:48:46.091 [Vue warn]: Unhandled error during execution of setup function
at <Detailid=1>
at <List__pageId=7__pagePath="pages/list/list"__pageQuery={} ...>
10:48:46.091 TypeError: Cannot read property 'route' of undefined
开发环境及版本信息
项目创建方式 | PC开发环境操作系统 | PC开发环境操作系统版本号 | HBuilderX类型 | HBuilderX版本号 | 手机系统 | 手机系统版本号 | 手机厂商 | 手机机型 | 页面类型 | vue版本 | 打包方式 |
---|---|---|---|---|---|---|---|---|---|---|---|
HBuilderX | Windows | 11 | 正式 | 4.45 | Android | Android 11 | 华为 | metapad 11 | vue | vue3 | 云端 |
1 回复
在uni-app中,当页面作为组件嵌入到其他页面时,可能会遇到props
解析route
失败的问题。这通常是因为组件化页面在嵌入时,其路由参数传递和解析方式与常规页面有所不同。为了确保route
参数能够正确传递给子组件,我们需要进行一些额外的处理。
以下是一个简单的示例,展示如何在uni-app中实现页面作为组件嵌入,并正确解析route
参数。
父页面(ParentPage.vue)
<template>
<view>
<navigator url="/pages/ChildPage/ChildPage?id=123&name=uniapp">跳转到子组件页面</navigator>
<view>
<!-- 嵌入子组件 -->
<child-page :route="route"></child-page>
</view>
</view>
</template>
<script>
import ChildPage from '@/pages/ChildPage/ChildPage.vue';
export default {
components: {
ChildPage
},
data() {
return {
route: this.$route // 获取当前路由信息
};
},
onLoad() {
// 在页面加载时,可以获取到路由参数并传递给子组件
console.log(this.$route.params, this.$route.query);
}
};
</script>
子组件页面(ChildPage.vue)
<template>
<view>
<text>ID: {{ routeQuery.id }}</text>
<text>Name: {{ routeQuery.name }}</text>
</view>
</template>
<script>
export default {
props: {
route: {
type: Object,
required: true
}
},
computed: {
routeQuery() {
// 从props中的route对象解析出query参数
return this.route.query || {};
}
},
onLoad() {
// 在组件加载时,可以访问到通过props传递的route对象
console.log(this.route);
}
};
</script>
注意事项
-
路由参数传递:在父页面中,我们通过
navigator
组件跳转到子组件页面,并在URL中携带参数。同时,我们将当前路由信息this.$route
作为props
传递给子组件。 -
参数解析:在子组件中,我们通过
props
接收路由信息,并使用computed
属性来解析query
参数,以便在模板中直接使用。 -
路由守卫:如果需要对路由参数进行验证或处理,可以在父页面或子组件的
onLoad
生命周期钩子中进行。
通过上述方式,我们可以在uni-app中实现页面作为组件嵌入,并正确解析route
参数。