typescript - 使用装饰器在 vue 3 中注入值未定义
问题描述
我正在尝试使用 tsyringe 在 Vue 3 中进行依赖注入,但是当我注入我的组件时,我得到了一个“未定义”值,这里是代码:
// TYPES.ts
export const TYPES = {
WARRIOR: Symbol.for("Warrior"),
WEAPON: Symbol.for("Weapon"),
CONTAINER: Symbol.for("GlobalContainer"),
}
// globalcontainer.ts
import "reflect-metadata";
import {container as globalContainer, DependencyContainer} from "tsyringe";
import {TYPES} from "@/models/Types";
import {Warrior} from "@/interfaces/Warrior";
import {Weapon} from "@/interfaces/Weapon";
import {Ninja} from "@/models/Warrior";
import {Katana} from "@/models/Weapon";
globalContainer.register<Warrior>(TYPES.WARRIOR, Ninja);
globalContainer.register<Weapon>(TYPES.WARRIOR, Katana);
globalContainer.register<DependencyContainer>(TYPES.CONTAINER, {useValue: globalContainer})
export default globalContainer;
// app.Vue
provide: {
[TYPES.CONTAINER]: globalContainer
}
当我 console.log Vue 中的组件选项时,我从“vue-component-decorator”复制粘贴插件装饰器,
我有
inject: {
_container: Symbol("GlobalContainer"),
}
但是当我在生命周期中调用它时created
,我得到了未定义,这就是我如何称呼它
// Home.vue
import { Options, Vue } from "vue-class-component";
import { DependencyContainer } from "tsyringe";
import { Inject } from "@/configs/InjectDecarator";
export default class Home extends Vue {
@Inject(TYPES.CONTAINER)
private _container!: DependencyContainer;
created() {
console.log(this._container!); // undefined
}
}
是否有任何选项可以调用此组件的提供?我的提供者是
[TYPES.CONTAINER]: globalContainer
我在这里使用 ts
解决方案
推荐阅读
- java - 如何用毕加索加载 mp3 文件艺术?
- ruby-on-rails - 为什么 Rails 6 Stimulus Reflex 会重新渲染具有重复内容的页面?
- apache-zookeeper - 如何清除数据节点的所有子节点,但不删除 Zookeeper 中的数据节点本身?
- python - Tkinter simpledialog 中断 pygame.mouse.get_focused()
- javascript - 使用 Jest 模拟导出匿名函数的模块值
- html - 如何使用容器 (CSS) 将 twitter 嵌入“包装”到我自己的规格大小
- notepad++ - 启动时使用的 Notepad++ 工作区
- firebase - Firebase 数据库规则 - 这是必要的吗?
- python-3.x - How fast or slow is the Constant memory that Numba allows a device to allocate, when compared to local and shared memories?
- python - 如何构建一维 CNN