【发布时间】:2015-09-03 19:46:10
【问题描述】:
我正在尝试将 ES6 类用作 Angular 服务,但是当它被实例化时,这些方法无法访问构造函数变量。
class dataWrapperService {
constructor($q, $log) {
this.$q = $q;
this.$log = $log;
}
data() {
console.log(this.$q);
}
}
dataWrapperService.$inject = ['$q', '$log'];
app.service('dataWrapper', dataWrapperService);
一旦服务被 Angular 注入并且我在其上调用 data 方法,该方法将无法访问构造函数值。
// calling the data method results in an error
dataWrapper.data(); //TypeError: Cannot read property '$q' of undefined
// console.log output of dataWrapper:
Object
$log: Object
$q: Q(resolver)
__proto__: smDataWrapperService
constructor: smDataWrapperService($q, $log)
data: data()
__proto__: Object
但是……
我可以手动新建 dataWrapperService,效果很好。
var dataWrapper = new smDataWrapperService("hello", "sir");
dataWrapper.data(); // "hello"
我在这里错过了什么?
更新:
这似乎只发生在 Promise 回调中:
我通常像这样将函数传递给 then/catch:
$http.get('whatever').then(dataWrapper.data);
但只有以下方法有效:
$http.get('whatever').then((response) => smDataWrapper.data(response))
【问题讨论】:
标签: angularjs ecmascript-6 angular-services