EmberJS:将所有者从组件注入本机 class
EmberJS: Injecting owner to native class from component
我想做的是在 Ember(3.15.0) 中将所有者注入我的 JS 本机 class。
它看起来像这样:
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()
解决的类似问题,但这些都是基于 Ember.Object 扩展的 Class.create()
。
有什么办法吗?
在此先感谢您的帮助。
在现代 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 的最新版本。
顺便说一下,该错误消息实际上可以使用容器 -> 所有者的更新
我想做的是在 Ember(3.15.0) 中将所有者注入我的 JS 本机 class。 它看起来像这样:
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()
解决的类似问题,但这些都是基于 Ember.Object 扩展的 Class.create()
。
有什么办法吗?
在此先感谢您的帮助。
在现代 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 的最新版本。
顺便说一下,该错误消息实际上可以使用容器 -> 所有者的更新