如何在Vue.js中使用反射?

How to use reflection in Vue.js?

我有一个案例,我从 signalr 收到一条消息,我试图根据我在消息中获得的名称实例化一个对象。

我在 angularjs 中遇到过类似的情况,我们使用 $injector 解决了它,该 $injector 具有 $injector.get("Name") returns 我需要的对象。

Vue 没有提供可以帮助解决此问题的 DI 容器。基本上应该有一个映射将 类 或工厂函数链接到字符串标识符:

const servicesMap = {
  Foo,
  Bar
};

...

if (!Object.keys(servicesMap).includes(name))
  throw ...

const Service = servicesMap[name];
const service = new Service();

考虑到可以从单个文件夹导入服务,这可以通过动态导入来完成:

const Service = require(`.../services/${name}`).default;
const service = new Service();

这取决于项目设置并自动禁用 services 的 treeshaking。