2016-04-17 25 views
1

在我的web應用程序中,我想驗證用戶是否有權繼續。Angular函數沒有使用顯式註釋,也不能在嚴格模式下調用

這是我index.js文件。運行方法:

.run(function (event, toState, toParams, fromState, $window) { 
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, $window) { 
    if (Auth.isLoggedIn && $window.localStorage.identityToken) { 

    var requiredAdmin = toState.data.requiredAdmin; 
    if (requiredAdmin && $window.localStorage.isAdmin){ 
     $state.go(toState.name); 
    } else { 
     $state.go(fromState.name); 
    } 
    var shouldGoToMain = fromState.name === 'login' && toState.name !== 'app.dashboard' ; 

    if (shouldGoToMain){ 
     $state.go('app.dashboard'); 
     event.preventDefault(); 
    } else { 
     $state.go(toState.name); 
    } 
    return; 
    } else { 
    $state.go('login'); 
    return; 
    } 

    // unmanaged 
}); 

});

控制檯錯誤是:Uncaught Error: [$injector:strictdi] function(event, toState, toParams, fromState, $window) is not using explicit annotation and cannot be invoked in strict mode

回答

1

您啓用strict mode,以檢測在那裏你忘記用$注入或數組符號,以確保您的代碼可以安全地精縮。

該消息告訴您未能正確註釋您的注射功能。需要注意的是,除了是,你的代碼沒有多大意義:

  • 傳遞到運行功能()應該採取注射服務的說法,除$窗口的所有參數都沒有的服務。
  • 傳遞給$ on()的函數不是注入函數。所以傳遞$ windows是沒有意義的。路由器只會用4個第一個參數來調用它。

所以,你的代碼應該是:

.run(['$rootScope', '$window', function($rootScope, $window) { 
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState) { 

我會強烈建議停止手工標註的注射功能,並使用ng-annotate來爲你做的。

+0

它的工作原理,但控制檯給我這個錯誤:$ state.go不是一個函數。爲什麼? (我也添加了兩個依賴於你的代碼:.run(['$ rootScope','$ window',function($ rootScope,$ window){$ rootScope。$ on('$ stateChangeStart',function(event ,toState,toParams,fromState,Auth,$ state)) – panagulis72

+0

你再犯同樣的錯誤,傳遞給$ on的方法不是一個可注入的函數,將Auth和$ state傳遞給該函數根本沒有意義。這些服務應該被注入到傳遞給run()的函數中(因此它們的名字也應該被添加到數組中) –

+0

完成!但是我有一個奇怪的本地錯誤...當它到達其他地方{$ state.go 'login');}它返回if(Auth.isLoggedIn && $ window.localStorage.identityToken),然後轉到$ state.go('login')並回到if(Auth ....)並繼續不動瀏覽器崩潰...如果你想,我推這裏的所有代碼:http://stackoverflow.com/questions/36677234/statechange-causes-inspected-target-crash-in-angular – panagulis72

相關問題