ember.js EmberJS:正在从组件向本机类注入所有者

v1uwarro  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(172)

在Ember(3.15.0)中,我尝试将owner注入到我的JS原生类中,看起来像这样:

component.ts

  export default class ClassOne extends Component {
    constructor() {
      super(...arguments);
      const myClass = new ClassTwo();
      ...
    }
  }

  ClassTwo.ts

  export default class ClassTwo {
    @service() someService: ServiceType;
    ...
  }

正因为如此,在某些服务上,我得到了预期的Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container
我见过使用getOwner(this).ownerInjection()解决的类似问题,但这些问题都是基于由Ember.Object扩展的Class.create()
有什么办法吗?
提前感谢您的帮助。

aemubtdh

aemubtdh1#

在现代Ember中,实现这一点的方法是使用setOwner

import { setOwner } from '@ember/application';
import { inject as service } from '@ember/service';

export default class MyClass {
  @service myService;

  constructor(owner) {
    setOwner(this, owner);
    this.appName = this.myService.appName;
  }
}

请在此处查看它的工作情况:https://ember-twiddle.com/e6481c33c3150e3418606e79decaed78?openFiles=classes.my-class%5C.js%2C
有关setOwner的文档,请参阅以下网址:
https://api.emberjs.com/ember/3.22/functions/@ember%2Fapplication/setOwner
这个答案应该在Ember 3.15+中有效,并且是Ember 3.23的当前版本。
顺便说一下,该错误消息实际上可以使用来自container -〉owner的更新

相关问题