uni-app web页面版 子组件的内容不会获取props传入的值 而是会从域名中的参数中获取
uni-app web页面版 子组件的内容不会获取props传入的值 而是会从域名中的参数中获取
测试过的手机:
web网页版
示例代码:
见附件
操作步骤:
见附件
预期结果:
网址参数的title和data中的title两种分开显示。
实际结果:
混淆显示
bug描述:
在特定情况下,
<testBug :title="title"></testBug>
data() {
return {
title:'这里是第二层的title'
}
},
这里的title传值失效,而是会使用域名中的title
http://localhost:5175/#/pages/index/bug?title=这里是第一层的title
最终显示的结果为:
这里是第一层的title
特定情况,
- 参数title和子组件的props同名
- 页面只有这一个子组件。
已上传bug示例代码,见附件
项目 | 信息 |
---|---|
产品分类 | uni-app x/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 22000.2295 |
HBuilderX版本号 | 4.01 |
手机系统 | 全部 |
手机厂商 | 苹果 |
2 回复
感谢您的反馈,已复现该问题,我排查一下原因,已加分
在 uni-app
中,子组件的内容不从 props
获取值,而是从 URL 参数中获取,可能是因为你在子组件中直接从 URL
中解析了参数,而没有正确使用 props
。以下是一些可能的原因和解决方法:
1. 确保正确传递 props
在父组件中,确保你正确地传递了 props
给子组件。例如:
<!-- 父组件 -->
<template>
<child-component :myProp="myData"></child-component>
</template>
<script>
export default {
data() {
return {
myData: 'Hello from parent',
};
},
};
</script>
在子组件中,确保你声明了 props
并使用了它:
<!-- 子组件 -->
<template>
<div>{{ myProp }}</div>
</template>
<script>
export default {
props: {
myProp: {
type: String,
required: true,
},
},
};
</script>
2. 检查是否从 URL 中获取参数
如果子组件从 URL 中获取参数,可能是因为你在子组件中使用了 uni-app
的 onLoad
或 onShow
生命周期钩子来解析 URL 参数。例如:
export default {
onLoad(options) {
console.log(options); // 从 URL 中获取参数
this.myData = options.myParam;
},
data() {
return {
myData: '',
};
},
};
如果你希望子组件从 props
中获取数据,而不是从 URL 中获取,请移除这种逻辑。
3. 检查路由传参
如果你是通过路由跳转传递参数,确保你使用的是 props
而不是 URL 参数。例如:
// 父组件跳转时传递参数
uni.navigateTo({
url: `/pages/childPage?myParam=${this.myData}`,
});
在子组件中,你可以通过 onLoad
获取 URL 参数,但更推荐的方式是通过 props
传递:
export default {
props: {
myProp: {
type: String,
required: true,
},
},
};
4. 调试和排查
- 检查父组件是否正确传递了
props
。 - 检查子组件是否正确声明和使用了
props
。 - 确保没有在子组件中通过其他方式(如 URL 参数)覆盖
props
的值。
5. 示例完整代码
以下是一个完整的示例,展示如何正确使用 props
:
<!-- 父组件 -->
<template>
<view>
<child-component :myProp="myData"></child-component>
</view>
</template>
<script>
import ChildComponent from '@/components/ChildComponent.vue';
export default {
components: {
ChildComponent,
},
data() {
return {
myData: 'Hello from parent',
};
},
};
</script>
<!-- 子组件 -->
<template>
<view>
{{ myProp }}
</view>
</template>
<script>
export default {
props: {
myProp: {
type: String,
required: true,
},
},
};
</script>