javascript - Comment AngularJS sait-il quels paramètres sont requis dans la fonction de rappel?
欧阳克
欧阳克 2017-06-10 09:48:17
0
1
977

Par exemple comme ça

app.controller('myCtrl', function($scope, $rootScope) {
    // 将$rootScope改成其他名字就不行了。
    $scope.names = ["Emil", "Tobias", "Linus"];
    $rootScope.lastname = "Refsnes";
});

Comment angulaire sait-il que mon deuxième paramètre nécessite $rootScope ?

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

répondre à tous(1)
迷茫

Parce qu'AngularJS propose deux méthodes d'injection. L'une est appelée injection de dépendances implicites (injection de dépendances implicites) et l'autre est appelée injection de dépendances explicites (injection de dépendances explicites).

Dans votre code, vous utilisez le premier type, l'injection de dépendances implicite :

app.controller('myCtrl', function($scope, $rootScope) {
    $scope.names = ["Emil", "Tobias", "Linus"];
    $rootScope.lastname = "Refsnes";
});

En raison de $scope$rootScope 都是 AngularJS 的 built-in service,因此 AngularJS 可以找到你想要注入的东西。但如果你改成 rootScope, AngularJS ne peut pas le trouver à partir de son propre framework.

Si vous utilisez l'injection de dépendances explicite, c'est ici :

app.controller('myCtrl', ['$scope', '$rootScope', function(whatever, blah) {
    whatever.names = ["Emil", "Tobias", "Linus"];
    blah.lastname = "Refsnes";
}]);

De cette façon, AngularJS le recherchera en fonction du $scope$rootScope explicitement déclaré. Peu importe ce que vous définissez dans les paramètres de la fonction anonyme. Faites juste attention à la commande.

Vous pouvez également le faire en appelant $inject manuellement. Comme ça :

var myController = function($scope, $rootScope) {
    $scope.names = ["Emil", "Tobias", "Linus"];
    $rootScope.lastname = "Refsnes";
});

myConroller.$inject = ['$scope', '$rootScope'];

app.controller('myCtrl', myController);

Veuillez vous référer à la documentation pour plus de détails : https://docs.angularjs.org/gu...
Partie annotation des dépendances.

La documentation vous rappelle également que si vous envisagez de compresser votre code, n'utilisez pas l'injection de dépendances implicite.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal