2015-06-21 6 views
30

Ich versuche, das $window Objekt in die config Methode in AngularJS zu injizieren, aber ich erhalte eine Fehlermeldung bekommen ...

Was ist der richtige Weg, dies zu tun?

Hier ist mein Code:

angular.module('myApp', ['$window']) //is this wrong? 

    .config(function ($window) { //this is not the way? 
     console.log($window); //console.log fails //error 
    }) 

    .controller("main", function($scope) { 
    $scope.index = 0; 
    $scope.num = number[$scope.index]; 

    $scope.increase = function() { 
    $scope.index += 1; 
    $scope.num = number[$scope.index]; 
    } 
}) 

Live Demo

+3

Was versuchen Sie zu tun? Viele Dienste sind im Block .config nicht verfügbar. Sie sollten wahrscheinlich versuchen, .run istead zu verwenden. – cbass

+0

Identifizieren Sie Ihren Anwendungsfall, um $ window in config zu verwenden? Versuchen Sie, den Standort abzurufen? – kishanio

Antwort

9

Nur Konstanten und Anbieter können in Konfigurationsblock injiziert werden. ist ein Service. & Es ist möglicherweise nicht verfügbar oder konfiguriert, während die Ausführung des Config-Blocks so eckig ist, dass es nicht verwendet werden kann.

Sie können run Block verwenden. Dies dient als Hauptmethode für Ihre eckige App. Dies wird gerade vor der Instanziierung der Anwendung ausgeführt. Nach Ablauf der Zeit, in der der Block ausgeführt wird, ist der gesamte Dienst fertig konfiguriert und bereit für die Injektion. So können Sie $window verwenden, wie unten,

angular.module('myApp', ['$window']) 

    .run(function ($window) { //use run rather than config 
     console.log($window); 
    }) 

    .controller("main", function($scope) { 
    $scope.index = 0; 
    $scope.num = number[$scope.index]; 

    $scope.increase = function() { 
    $scope.index += 1; 
    $scope.num = number[$scope.index]; 
    } 
    }) 
+1

Dies funktioniert nicht: angular.module ('myApp', ['$ window']), weil "$ window" kein Modul ist. –

71

Sie nicht $window Dienst an der Config injizieren als Dienste noch nicht in Config-Zeit initialisiert werden. Sie können jedoch die Provider injizieren und eine Instanz abrufen. in Ihrem Fall:

angular.module('myApp', []) 

.config(function ($windowProvider) { 
    var $window = $windowProvider.$get(); 
    console.log($window); 
}) 
+1

Diese Antwort muss akzeptiert werden. – Stalinko