2015-02-05 3 views
2

Привет всем У меня есть некоторые проблемы с угловой фабрикой. Пытаясь вызвать функцию на моем контроллере с завода, эта функция вызывает другую функцию на той же фабрике с this. но я всегда получаю консоль «ошибка неопределенными не является функцией»Угловой способ доступа к заводу на заводе с этим. и я получаю неопределенную функцию

angular.module('psJwtApp').factory('authToken', function ($window) { 
    var storage = $window.localStorage; 
    var cachedToken; 
    return { 
    setToken: function(token){ 
     cachedToken = token; 
     storage.setItem('userToken', token); 
    }, 
    getToken: function(){ 
     if(!cachedToken) 
     {cachedToken = storage.getItem('userToken');} 

     return cachedToken; 
    }, 
    isAuthenticated: function() { 
     return !!self.getToken(); 

    } 
    }; 
}); 

Тогда я называю это в моем угловом контроллере:

angular.module('psJwtApp').controller('HeaderCtrl', function ($scope, authToken) { 
    $scope.isAuthenticated = authToken.isAuthenticated; 
}); 

Любая помощь очень ценится. Я попытался позвонить getToken как this, так как self, как authToken.getToken. Ничего. если я утешу authToken.getToken Я получаю undefined. Любые идеи, что может быть?

+1

где находится 'var self = this'? возможно, вы это забыли? – anvarik

+1

Я думаю, что одна из проблем заключается в том, что вам не хватает '()' в конце вызова метода: $ scope.isAuthenticated = authToken.isAuthenticated(); '. –

+0

@ ViníciusGobboA.deOliveira благодарит за предложение, когда я объявляю его authToken.isAuthenticated(); я все еще не определен, это не функция. – jsrosas

ответ

3

Наконец-то разрешила эту проблему, объявив все функции внутри объекта и вернув этот объект. Затем простое вызов authToken.getToken и все работает хорошо в моем мире!

angular.module('psJwtApp').factory('authToken', function ($window) { 
var storage = $window.localStorage; 
var cachedToken; 
var userToken = 'userToken'; 
var authToken = { 
    setToken: function(token){ 
     cachedToken = token; 
     storage.setItem(userToken, token); 
    }, 
    getToken: function(){ 
     if(!cachedToken) 
     {cachedToken = storage.getItem(userToken)}; 
     return cachedToken; 
    }, 
    isAuthenticated: function() { 
     return !!authToken.getToken(); 
    }, 
    removeToken: function() { 
     cachedToken = null; 
     storage.removeItem(userToken); 
    } 
    }; 
    return authToken; 

});