uni-app web页面版 子组件的内容不会获取props传入的值 而是会从域名中的参数中获取

发布于 1周前 作者 songsunli 来自 Uni-App

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

特定情况,

  1. 参数title和子组件的props同名
  2. 页面只有这一个子组件。

已上传bug示例代码,见附件

cs2.zip

项目 信息
产品分类 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-apponLoadonShow 生命周期钩子来解析 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>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!