angularjs - 带有 ES6 类和 Babel 的 Angular 服务

标签 angularjs ecmascript-6 angular-services

我正在尝试将 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 注入(inject)并且我在其上调用 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 回调中:

我通常将函数传递给 然后/ catch 像这样:
$http.get('whatever').then(dataWrapper.data);

但只有以下方法有效:
$http.get('whatever').then((response) => smDataWrapper.data(response))

最佳答案

我知道这已经晚了,但也许今天有人会像我一样偶然发现这个问题,遇到类似的问题,所以......

实际上,这与 promise 无关。当你这样做时:

let function1 = () => {}
let function2 = function1

实际上,this对象的功能不同。因此,当您尝试 .then(function1) , 实际上 function1正在复制到参数 successCallback它是 this被改变。

但是当你使用 .then(() => function1()) , successCallback接收您的 lambda,以及实际的 thisfunction1没有丢失。

所以如果你不知道,你做什么从不将函数分配给 javascript 中的函数,请改用 lambdas

关于angularjs - 带有 ES6 类和 Babel 的 Angular 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32384228/

相关文章:

angularjs - AngularJS 中的单元测试 promise 错误 : Expected a spy, 但得到了 getCtrl({ })

javascript - Node.JS——需要帮助理解原生流

javascript - 上下文映射函数中的 jsx-no-bind

typescript - 如何修改JSDoc block 注释代码

javascript - 操作 promise 结果中的数据

javascript - 使用 AngularJS 在服务/工厂与 Controller 中解决 promise

angularjs - 在 Angular JS 中可以声明多少个 ng-App?

angularjs - 如果 ngSrc 路径为空或给出 404 错误,如何用字符串替换它

AngularJS ng-include做HistoryJS停止工作

javascript - 暂停 Controller 并等待服务响应