uni-app 字节小程序 provide 全局注入一个js文件 inject接收 在vue实例的 data里面用会报错,在生命周期和methods里面都正常

uni-app 字节小程序 provide 全局注入一个js文件 inject接收 在vue实例的 data里面用会报错,在生命周期和methods里面都正常

产品分类:

uniapp/小程序/字节跳动

PC开发环境操作系统:

Windows

PC开发环境操作系统版本号:

win11

HBuilderX类型:

正式

HBuilderX版本号:

3.99

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

4.2.1

基础库版本号:

3.16.0.0

项目创建方式:

HBuilderX

示例代码:

<script>
import myLoginNew from '@/components/my-login-new/my-login-new.vue';
export default {
inject: ['$http', '$api', '$utils','$userUtils', '$tokenUtils'],
components: {
myLoginNew
},
data() {
return {
imgPath: this.$api.imgPath//oss图片路径
}
},
onUnload() {  
},
onLoad(e) {       
},
onShow() {  
    console.log('onShow  '+this.$api.imgPath);  
},
onPageScroll(res) {  

},
onReachBottom() {  

},
methods: {  
},
}
</script>

操作步骤:

直接运行

预期结果:

在data 种能获取到全局注入的js种定义的数据

实际结果:

报错

bug描述:

字节小程序 provide 全局注入一个js文件 inject接收 在vue实例的 data里面用会报错,在生命周期和methods里面都正常


更多关于uni-app 字节小程序 provide 全局注入一个js文件 inject接收 在vue实例的 data里面用会报错,在生命周期和methods里面都正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 字节小程序 provide 全局注入一个js文件 inject接收 在vue实例的 data里面用会报错,在生命周期和methods里面都正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中使用字节小程序时,如果你想通过 provideinject 实现全局注入并在 Vue 实例的 data 中使用,可能会遇到一些问题。这是因为 data 是在 Vue 实例初始化时被解析的,而 inject 的值可能还没有被注入。

问题分析

在 Vue 实例的 data 中直接使用 inject 的值,可能会导致 data 初始化时 inject 的值还未准备好,从而导致报错。而在生命周期钩子(如 createdmounted)和 methods 中使用 inject 的值时,inject 的值已经准备好,因此不会报错。

解决方案

  1. 在生命周期钩子中初始化数据
    你可以将 data 中的相关属性初始化为 null 或默认值,然后在生命周期钩子中通过 inject 的值来更新这些属性。

    export default {
      data() {
        return {
          myInjectedValue: null,
        };
      },
      inject: ['myInjectedValue'],
      created() {
        this.myInjectedValue = this.myInjectedValue;
      },
    };
    
  2. 使用计算属性
    你也可以使用计算属性来获取 inject 的值,这样可以在 inject 的值变化时自动更新。

    export default {
      inject: ['myInjectedValue'],
      computed: {
        injectedValue() {
          return this.myInjectedValue;
        },
      },
    };
    
  3. methods 中处理逻辑
    如果 inject 的值只用于某些方法的逻辑,你可以在 methods 中直接使用 inject 的值,而不需要在 data 中存储。

    export default {
      inject: ['myInjectedValue'],
      methods: {
        doSomething() {
          console.log(this.myInjectedValue);
        },
      },
    };
回到顶部