考虑以下组件
import DoSomethingSpecial from '....';
export default MyComponentController {
constructor() {
this.result = new DoSomethingSpecial().getData();
}
...
}
因此,MyComponentController
当然是组件的控制器,DoSomethingSpecial
类是ES215类。
我遇到的问题如下:在DoSomethingSpecial
内部我想使用一些角度服务,比如$ http和/或$ q等。我怎样才能将这些注入这个类,例如:< / p>
export default class DoSomethingSpecial {
constructor() {
}
getData() {
let $q = angular.injector().get('$q');
....
}
}
然而,这不起作用。还有其他方法,还是应该将此类更改为服务?
更新:一个可能的用例:假设您在服务中下载了一个对象列表,您可以将其转换为MyRecordItems的实例,如下所示
import MyRecordItem from '...';
export default class MyRecordsService {
constructor($http) {
$http.get('url', { options}).then((response) => {
this.records = [];
response.data.forEach((item) => {
this.records.push(new MyRecordItem(item));
});
});
}
}
接下来,在您应用的某个地方使用此列表 - &gt;修改 - &gt; <保存
let list = myRecordService.getList();
list[0].count = 10;
list[0].save();
此记录如何持续存在?它可以如下
export default class MyRecordItem {
constructor(data) { this.data = data; }
save() {
let url = ....;
return angular.$injector.get('$http').post(url, this.data)
}
}
答案 0 :(得分:2)
将ES6类所需的依赖项注入控制器的构造函数(在本例中为$q
)。将$q
注入控制器后,创建该类的实例,并将$q
作为参数传递给构造函数。将实例分配给this
。
import DoSomethingSpecial from '....';
class MyComponentController {
constructor($q) {
'ngInject';
this.doSomethingSpecialInstance = new DoSomethingSpecial($q); // instantiate the service, and pass the dependencies
}
getData() {
this.result = doSomethingSpecialInstance().getData(); // use the instance
}
}
export default MyComponentController;
和班级定义:
export default class DoSomethingSpecial {
constructor($q) {
this.$q = $q;
}
getData() {
// do something with this.$q
}
}