Coffeescript AngularJS 服务,无法使用@符号访问成员函数

Coffeescript AngularJS service, can't access member functions using @ notation

为了便于阅读,我删除了一些内容。

我已经使用 CoffeeScript class 系统编写了用户服务,但是当它试图访问它自己的成员函数时它给我带来了问题。

User = (...) ->
    'ngInject'

    new class User

        constructor: ->
            @setRole() 

        login: (params) ->
            params.grant_type = 'password'

            request = {...}

            $http(request).then (response) ->
                $window.localStorage.token = response.data.access_token
                payload = jwtHelper.decodeToken(response.data.access_token)
                $rootScope.$broadcast EVENTS.AUTH.LOGIN
                @setRole() # PROBLEM LINE
            , (response) ->
                if response.status == 400
                    $rootScope.$broadcast EVENTS.ERROR.BAD_REQUEST
            ...

当我尝试调用 @setRole() 时,浏览器通知我 setRole() 不存在:

TypeError: Cannot read property 'setRole' of undefined

编译为:

  User = [..., function(...) {
    'ngInject';

    return new (User = (function() {
      function User() {
        this.setRole();
        console.log("User service loaded");
      }

      User.prototype.login = function(params) {
        var request;
        params.grant_type = 'password';
        request = {...}
        };
        return $http(request).then(function(response) {
          var payload;
          $window.localStorage.token = response.data.access_token;
          payload = jwtHelper.decodeToken(response.data.access_token);
          $rootScope.$broadcast(EVENTS.AUTH.LOGIN);
          return this.setRole(); # WRONG this, I PRESUME
        }, function(response) {
          if (response.status === 400) {
            return $rootScope.$broadcast(EVENTS.ERROR.BAD_REQUEST);
          }
        });
      };
      ...

我的问题是:为什么我无法使用 @ 表示法在我自己的服务中调用 User.setRole()?有解决方法吗?我认为它与不对应于 User 实例的 this 指针有关。

问题是在您传递给 then 的函数中,this 发生了变化。为了保持不变,请使用粗箭头语法 (=>):

$http(request).then (response) =>