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



为了易读性,我删除了一些东西。

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

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() 不存在:

类型错误: 无法读取未定义的属性"setRole"

这将编译为:

  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()?有解决方法吗?我认为这与与用户实例不对应的此指针有关。

问题是在你传递给 then 的函数中,this变化。要保持相同,请使用胖箭头语法 ( => ):

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

最新更新