Я удалил некоторые материалы для удобочитаемости.Служба Coffeescript AngularJS, не может получить доступ к функциям участника, используя @ notation
Я написал службу пользователя, используя систему класса 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() не существует:
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() в моей собственной службе, используя нотацию @
? Есть ли обходной путь для этого? Я полагаю, что это имеет какое-то отношение к этому указателю, не соответствующему экземпляру пользователя.
Похоже, что это решило! Спасибо. –