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) =>
为了便于阅读,我删除了一些内容。
我已经使用 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) =>