2015-02-05 9 views
2

안녕하세요 모두 저는 각진 공장에서 어떤 문제가 있습니다. 공장에서 내 컨트롤러의 함수를 호출하려고 시도하면이 함수는 동일한 공장 내의 다른 함수를 this으로 호출합니다.공장 출하시 공장 출입시 접근 방법입니다. 그리고 정의되지 않은 함수를 얻습니다.

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

어떤 도움을 주시면 더 좋구요 :하지만 난 항상 콘솔

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(); 

    } 
    }; 
}); 

가 그럼 난 내 각 컨트롤러에 전화를 "정의되지 않은 오류가 함수가 아닙니다"얻는다. 나는 getTokenthis으로, 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; 

});