recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment AngularJS sait-il quels paramètres sont requis dans la fonction de rappel?

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 ?

欧阳克欧阳克2718 Il y a quelques jours958

répondre à tous(1)je répondrai

  • 迷茫

    迷茫2017-06-10 09:50:17

    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.

    répondre
    0
  • Annulerrépondre