2016-04-17 5 views
1

In meiner Webanwendung möchte ich überprüfen, ob der Benutzer die Berechtigung zum Fortfahren hat.Winkelfunktion verwendet keine explizite Anmerkung und kann nicht im strikten Modus aufgerufen werden

Dies ist die .run Methode in meiner index.js Datei:

.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 
}); 

});

Die Konsole Fehler ist: Uncaught Error: [$injector:strictdi] function(event, toState, toParams, fromState, $window) is not using explicit annotation and cannot be invoked in strict mode

Antwort

1

Sie aktiviert strict mode, um zu erkennen, wo Sie verwenden vergessen zu $ ​​zu injizieren oder die Array-Notation, um sicherzustellen, können Sie Ihren Code sicher minimierte werden.

Die Nachricht teilt Ihnen mit, dass Sie Ihre injizierbaren Funktionen nicht ordnungsgemäß kommentieren konnten. Beachten Sie, dass, zusätzlich zu, dass der Code nicht viel Sinn macht:

  • die Funktion übergeben laufen() injizierbare Dienste als Argument nehmen soll, und alle Argumente außer Fenster $ sind keine Dienste.
  • Die an $ on() übergebene Funktion ist keine injizierbare Funktion. Es ist also sinnlos, das Fenster zu übergeben. Der Router wird es nur mit den 4 ersten Argumenten aufrufen.

So sollte Ihr Code sein:

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

Ich würde dringend raten zu stoppen Ihre injizierbare Funktionen von Hand mit Anmerkungen versehen und ng-annotate zu verwenden, die für Sie zu tun.

+0

Es funktioniert, aber Konsole gibt mir diesen Fehler: $ state.go ist keine Funktion. Warum? (Ich habe auch zwei Abhängigkeiten zu Ihrem Code hinzugefügt: .run (['$ rootScope', '$ window', Funktion ($ rootScope, $ window) { $ rootScope. $ On ('$ stateChangeStart', Funktion (event , toState, toParams, fromState, Auth, $ state)) – panagulis72

+0

Sie wiederholen den gleichen Fehler noch einmal.Die Methode, die an $ on übergeben wird, stellt KEINE injizierbare Funktion dar. Das Übergeben von Auth und $ state an diese Funktion macht überhaupt keinen Sinn. Diese Dienste sollten in die Funktion injiziert werden, die an run() übergeben wird (und ihr Name sollte daher ebenfalls zum Array hinzugefügt werden). –

+0

Fertig! Aber ich habe einen seltsamen lokalen Fehler ... wenn es zu sonst geht {$ state.go ('login');} Es kehrt zu if (Auth.isLoggedIn && $ window.localStorage.identityToken) zurück, geht dann zu $ ​​state.go ('login') und kehrt in if (Auth ....) zurück und setzt die Verbindung fort Browser-Absturz ... Wenn Sie möchten, habe ich den gesamten Code hier: http://stackoverflow.com/questions/36677234/statechange-causes-inspected-target-crash-in-angular – panagulis72

Verwandte Themen