账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue全局混入无法在异步组件中生效
    37
    0
    项目中不可避免的使用分模块异步加载,同时也用全局混入,本来以为是在异步组件中能生效mounted这些周期,结果没有生效,请问有什么办法吗?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 北地大李 普通会员 1楼

      在Vue中,全局混入(Global Shims)是一种允许在Vue应用中引入自定义模块的方式。当一个异步组件中使用全局混入时,通常需要确保这两个模块在异步组件创建时已经在项目中注册并且全局路径已正确设置。以下是在异步组件中使用全局混入的一些步骤:

      1. 创建一个全局混入模块: ```javascript // app.js import { GlobalShim } from './common';

      export default { components: { MyComponent: GlobalShim(MyComponent) } }; ```

      1. 注册全局混入: 在项目中,确保全局模块在需要使用时已注册。例如,假设你有一个名为 MyModule 的全局模块,你可以这样在 app.js 中注册它:

      javascript import MyModule from './common'; app.component('my-component', MyComponent);

      1. 配置全局路径: 在你应用的入口文件(通常是 app.vue)中,确保全局路径正确设置。例如:

      ```javascript import MyModule from './common'; import MyComponent from './my-component.vue';

      // 在 app.vue 文件中配置全局路径 import { Global } from 'vue';

      Global.config({ routes: { '/my-component': { component: MyComponent } } }); ```

      1. 创建异步组件: 创建一个异步组件,包含引入的全局模块。例如:

      javascript export default { async created() { this.myComponent = await import('./my-component.vue'); } };

      1. 使用全局混入: 在异步组件中使用全局混入,只需要在组件标签中引入这个模块即可:

      ```html

      export default { name: 'MyComponent' }; ```

      现在,当你在异步组件中使用 Global 时,Vue将自动加载并注册全局模块 MyModule,并在相应的组件实例中使用它。由于全局混入是异步的,所以在组件加载完成后,这些导入语句会自动执行,使异步组件能在异步操作完成后立即运行并实例化。

      注意:全局混入只是对组件实例进行了静态导入,实际上并不会实例化任何组件,因为它们是通过 import 引入的。如果需要在异步操作完成后实例化组件,可以在异步操作完成后,通过 this.$mount()this.$unmount() 等方法在页面上挂载组件实例。例如:

      ```javascript import MyComponent from './my-component.vue';

      // 在异步操作完成后,挂载组件实例 this.$mount(MyComponent);

      // 组件的其他生命周期方法 this.$on('my-component-mounted', () => { // 在组件实例挂载完成后处理逻辑 }); ```

      这样,当异步组件完成其异步操作后,my-component-mounted 事件会触发,你可以在这个事件中处理组件挂载后的相关操作。

    • 猫极 普通会员 2楼

      在Vue中,全局混入(Global Shims)是一种允许在Vue应用中引入自定义模块的方式。当一个异步组件中使用全局混入时,通常需要确保这两个模块在异步组件创建时已经在项目中注册并且全局路径已正确设置。以下是在异步组件中使用全局混入的一些步骤:

      1. 创建一个全局混入模块: ```javascript // app.js import { GlobalShim } from './common';

      export default { components: { MyComponent: GlobalShim(MyComponent) } }; ```

      1. 注册全局混入: 在项目中,确保全局模块在需要使用时已注册。例如,假设你有一个名为 MyModule 的全局模块,你可以这样在 app.js 中注册它:

      javascript import MyModule from './common'; app.component('my-component', MyComponent);

      1. 配置全局路径: 在你应用的入口文件(通常是 app.vue)中,确保全局路径正确设置。例如:

      ```javascript import MyModule from './common'; import MyComponent from './my-component.vue';

      // 在 app.vue 文件中配置全局路径 import { Global } from 'vue';

      Global.config({ routes: { '/my-component': { component: MyComponent } } }); ```

      1. 创建异步组件: 创建一个异步组件,包含引入的全局模块。例如:

      javascript export default { async created() { this.myComponent = await import('./my-component.vue'); } };

      1. 使用全局混入: 在异步组件中使用全局混入,只需要在组件标签中引入这个模块即可:

      ```html

      export default { name: 'MyComponent' }; ```

      现在,当你在异步组件中使用 Global 时,Vue将自动加载并注册全局模块 MyModule,并在相应的组件实例中使用它。由于全局混入是异步的,所以在组件加载完成后,这些导入语句会自动执行,使异步组件能在异步操作完成后立即运行并实例化。

      注意:全局混入只是对组件实例进行了静态导入,实际上并不会实例化任何组件,因为它们是通过 import 引入的。如果需要在异步操作完成后实例化组件,可以在异步操作完成后,通过 this.$mount()this.$unmount() 等方法在页面上挂载组件实例。例如:

      ```javascript import MyComponent from './my-component.vue';

      // 在异步操作完成后,挂载组件实例 this.$mount(MyComponent);

      // 组件的其他生命周期方法 this.$on('my-component-mounted', () => { // 在组件实例挂载完成后处理逻辑 }); ```

      这样,当异步组件完成其异步操作后,my-component-mounted 事件会触发,你可以在这个事件中处理组件挂载后的相关操作。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部