Angular-styleguide: $scope.watch avec contrôleur comme syntaxe

Créé le 17 juil. 2015  ·  12Commentaires  ·  Source: johnpapa/angular-styleguide

Dans votre exemple de visionnage avec un contrôleur comme syntaxe ( Style Y032 ), vous n'indiquez pas clairement que vous allez coupler le contrôleur à sa vue car votre extrait ne fonctionnera que s'il y a SomeController as vm dans votre vue.

Pour moi, c'est un inconvénient à utiliser l'ensemble du contrôleur comme syntaxe. Vous pouvez résoudre ce problème en utilisant la notation de fonction $scope.watch ou en écrivant quelque chose sur les problèmes en utilisant votre approche actuelle.

Angular 1 enhancement help wanted

Commentaire le plus utile

Je pense que cela résume la discussion


contrôleurAs $watch

[Style [Y999](#style-y999)]
  • Évitez d'utiliser $scope.$watch. Utilisez plutôt ng-change ou une directive personnalisée.

    _Pourquoi ?_ : Les montres sont plus difficiles à tester et elles sont également mauvaises pour les performances car elles sont évaluées dans chaque boucle $digest.

    /* avoid */
    function SomeController($scope) {
    var vm = this;
    
    $scope.$watch(function () {
        return vm.title;
    }, doSomething);
    
    function doSomething() {
    }
    }
    
    <!-- recommended -->
    <input type="text" ng-model="vm.title" ng-change="vm.doSomething()"/>
    
    /* recommended */
    function SomeController() {
      var vm = this;
      vm.doSomething = doSomething;
    
      function doSomething() {
      }
    }
    

Tous les 12 commentaires

RP si tu veux

alors pensez-vous que je devrais simplement écrire sur les problèmes en utilisant controller as avec $scope.$watch ou devrais-je introduire la notation des fonctions comme

$scope.$watch(function () {
    return vm.title;
}, function(current, original) {
    $log.info('vm.title was %s', original);
    $log.info('vm.title is now %s', current);
});

remplacer l'ancien exemple ou dois-je comparer les deux ?

Si je comprends votre structure, je comparerais les deux et utiliserais votre syntaxe à éviter et recommandée.

Brrrr. Regarder à l'intérieur d'un contrôleur un anti-modèle. Vous n'en avez vraiment pas besoin dans cet exemple de toute façon ; serait préférable d'ajouter une liaison d'événement de changement (et je pense que c'est ce que vous ferez dans Ng2).

Je préférerais que cette discussion soit une sous-section du "ControllerAs" qui commence par exhorter les gens à éviter de regarder à l'intérieur d'un contrôleur. Ensuite, "si vous le devez", j'irais simplement avec la version @Jandalf et je ne ferais pas trop d'

que pensez-vous de cet aperçu :

controllerAs et $watch

[Style Y999 ] //

Remarque : créez des montres avec prudence car elles ajoutent plus de charge au cycle de résumé. Utilisez plutôt ngChange .

  • utilisez la notation de fonction de $scope.$watch pour surveiller les changements

_Pourquoi ?_ : le contrôleur pourrait être lié à une autre valeur que vm

Donc, si vous avez vraiment besoin de surveiller une valeur, utilisez ce modèle :

  <input ng-model="vm.title"/>
  function SomeController($scope, $log) {
      var vm = this;

      $scope.$watch(function () {
          return vm.title;
      }, function(current, original) {
          $log.info('vm.title was %s', original);
          $log.info('vm.title is now %s', current);
      });
  }

Hummm

Il doit être clair que la surveillance dans les contrôleurs doit être évitée. utilisez plutôt ngChange. Ou déplacez la montre vers une directive. les pensées?

Ensuite, une nouvelle règle sur l'utilisation de watch with controllerAs qui remplace ou met à jour ce que j'ai là-dedans.

D'accord avec toi, Jean.

Il n'est pas assez clair qu'une veille dans un contrôleur doit être évitée et qu'il est préférable d'écouter l'événement de changement OU d'écrire une directive. Devrait avoir un "pourquoi" pour ce conseil aussi (pourquoi les montres dans les contrôleurs sont mauvaises)

Le conseil sur la façon de le faire _si vous devez_ doit être un point distinct et devrait commencer par un avertissement fort et répété contre.

ALORS, j'aimerais voir un cas pour lequel je le ferais du tout. Je n'en vois pas ici. Je ne peux pas vraiment penser à un. Peut tu?

Sans un tel exemple, je serais réticent à inclure ce conseil du tout.

Aussi, le "Pourquoi" dans ce texte m'a dérouté. C'est un "pourquoi" pour la technique spécifique consistant à éviter la dépendance au nom "vm". C'est secondaire par rapport au vrai pourquoi, c'est pourquoi vous regarderiez jamais dans un contrôleur. Cela n'a de sens que s'il est précédé d'un exemple « ne le faites pas de cette façon ».

Plus de travail certes mais nécessaire je pense.

proposition quelqu'un?

Je pense que cela résume la discussion


contrôleurAs $watch

[Style [Y999](#style-y999)]
  • Évitez d'utiliser $scope.$watch. Utilisez plutôt ng-change ou une directive personnalisée.

    _Pourquoi ?_ : Les montres sont plus difficiles à tester et elles sont également mauvaises pour les performances car elles sont évaluées dans chaque boucle $digest.

    /* avoid */
    function SomeController($scope) {
    var vm = this;
    
    $scope.$watch(function () {
        return vm.title;
    }, doSomething);
    
    function doSomething() {
    }
    }
    
    <!-- recommended -->
    <input type="text" ng-model="vm.title" ng-change="vm.doSomething()"/>
    
    /* recommended */
    function SomeController() {
      var vm = this;
      vm.doSomething = doSomething;
    
      function doSomething() {
      }
    }
    

Documentez-vous le $watch à l'intérieur de la directive en utilisant controllerAs ? Pouvez-vous recommander un lien ou une ressource ?

quelqu'un est intéressé à faire un PR ?

nettoyer mes anciens problèmes

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

TradeArcher2020 picture TradeArcher2020  ·  4Commentaires

amiceli picture amiceli  ·  7Commentaires

jejja picture jejja  ·  25Commentaires

robrothedev picture robrothedev  ·  6Commentaires

kdekooter picture kdekooter  ·  8Commentaires