zZZ1Ma
zZZ1Ma
  • 发布:2023-10-07 17:46
  • 更新:2023-10-08 12:03
  • 阅读:195

【报Bug】provide/inject 在子页面injection ‘xxx' not found

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 22H2

HBuilderX类型: 正式

HBuilderX版本号: 3.8.12

第三方开发者工具版本号: Nightly Build 1.06.2309272

基础库版本号: 3.1.2

项目创建方式: HBuilderX

示例代码:
// indexPage  
<script setup>  
    import { provide } from 'vue'  

    provide('foo', 'bar')  

    const buttonClick = () => {  
        uni.navigateTo({ url: '/pages/next/next' })  
    }  
</script>
// nextPage  
<script setup>  
    import { inject } from 'vue'  

    const foo = inject('foo' /*, null*/ ) // 注释掉初始值null,则【Vue warn】: injection "foo" not found.   

    const buttonClick = () => {  
        console.log(foo); // 值为 null | undefined,而不是 'bar'  
    }  
</script>

操作步骤:

见代码实例

预期结果:

见代码实例

实际结果:

见代码实例

bug描述:

用provide/inject以实现页面间通信,传递复杂数据;子页面【Vue warn】injection ‘xxx' not found,且无法获取到数据

2023-10-07 17:46 负责人:无 分享
已邀请:
YUANRJ

YUANRJ

provide/inject是用于组件之间通讯的,页面通讯可以使用 uni.$emit/uni.$on

  • zZZ1Ma (作者)

    首先,app.vue内的provide的值,其他任何页面都可inject使用,为什么页面就不行了?不是很懂,不是整个app同一个Vue实例吗?

    其次, uni.$emit/uni.$on文档作者简直了,示例代码写在一个页面内?完全无法演示一级页面传递参数给二级页面。一级页面使用uni.$emit派发事件并携带参数,二级页面uni.$on压根监听不到(事件派发时,二级页面实例还没构建)。

    最后,uni.$emit/uni.$on在用于【一级页面传递参数给二级页面】这一场景时,很繁琐,目前只能这么用https://github.com/dcloudio/uni-app/issues/3945#issuecomment-1311164612

    2023-10-11 12:41

要回复问题请先登录注册