gpt4 book ai didi

javascript - EmberJS : Injecting owner to native class from component

转载 作者:行者123 更新时间:2023-12-04 12:23:19 26 4
gpt4 key购买 nike

我正在尝试做的事情是将所有者注入(inject)我在 Ember(3.15.0)中的 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;
...
}

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

最佳答案

在现代 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 中是最新的。
顺便说一句,该错误消息实际上可以使用来自容器 -> 所有者的更新

关于javascript - EmberJS : Injecting owner to native class from component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65010591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com