recherche

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

angulaire.js - Le standard pour l'injection de dépendances dans AngularJS

Lorsque j'utilise des communautés majeures pour vérifier mes connaissances sur Angular, je vois souvent deux modes d'injection de dépendances, dont certains sont des contrôleurs.('Ctr',[$scope,function($scope){...}] ) ;
Certains sont directement contrôleur.('Ctr',function($scope){...});
Je voudrais demander si ce dernier mode est un nouveau mode et est universel ?

大家讲道理大家讲道理2790 Il y a quelques jours712

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

  • 滿天的星座

    滿天的星座2017-05-15 17:02:16

    La meilleure pratique est d'utiliser : contrôleur.('Ctr',['$scope',function($scope){...}]).

    1. Comme @Deboy l'a dit, pour la compression js.

    2. Meilleures performances. (controller.('Ctr',function($scope){...}), angulairejs analysera les paramètres de cette fonction et obtiendra enfin le contenu à injecter, tandis que la méthode d'écriture de style tableau peut ignorer l'étape d'analyse , et les performances seront meilleures). Ci-joint le code source pour référence :

    function annotate(fn, strictDi, name) {
      var $inject,
          fnText,
          argDecl,
          last;
    
      if (typeof fn === 'function') {
        if (!($inject = fn.$inject)) {
          $inject = [];
          if (fn.length) {
            if (strictDi) {
              if (!isString(name) || !name) {
                name = fn.name || anonFn(fn);
              }
              throw $injectorMinErr('strictdi',
                '{0} is not using explicit annotation and cannot be invoked in strict mode', name);
            }
            fnText = fn.toString().replace(STRIP_COMMENTS, '');
            argDecl = fnText.match(FN_ARGS);
            forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
              arg.replace(FN_ARG, function(all, underscore, name) {
                $inject.push(name);
              });
            });
          }
          fn.$inject = $inject;
        }
      } else if (isArray(fn)) {
        last = fn.length - 1;
        assertArgFn(fn[last], 'fn');
        $inject = fn.slice(0, last);
      } else {
        assertArgFn(fn, 'fn', true);
      }
      return $inject;
    }

    répondre
    0
  • 天蓬老师

    天蓬老师2017-05-15 17:02:16

    Parce que pendant le processus d'optimisation front-end, les fichiers js et autres seront compressés et certaines chaînes seront remplacées par des lettres simples. Si tel est le cas, l'injection angulaire échouera et cette dernière ne sera pas empêchée d'être compressée. ne peut pas être injecté. Le précédent est traité de manière à ce que même s'il est compressé, il ne provoquera pas d'échec d'injection

    Les effets des deux exécutions en phase de développement sont les mêmes

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-15 17:02:16

    La méthode d'implémentation d'injection de dépendances de

    angular n'a pas de spécifications/normes à aborder, mais c'est une bonne idée.
    J'ai déjà écrit un tutoriel pour vous apprendre à écrire à la main un système d'injection de dépendances similaire à angular J'espère qu'il vous sera utile : l'injection de dépendances manuscrite BDD

    .

    répondre
    0
  • Annulerrépondre