Angular-styleguide: $ scope.watch con controlador como sintaxis

Creado en 17 jul. 2015  ·  12Comentarios  ·  Fuente: johnpapa/angular-styleguide

En su ejemplo de ver con un controlador como sintaxis ( Estilo Y032 ), no deja en claro que SomeController as vm en su vista.

Para mí, esto es una desventaja al usar todo el controlador como sintaxis. Puede resolver esto usando la notación de función de $ scope.watch o escribir algo sobre los problemas usando su enfoque actual.

Angular 1 enhancement help wanted

Comentario más útil

Creo que esto resume la discusión.


controlador como $ reloj

[Estilo [Y999] (# style-y999)]
  • Evite usar $ scope. $ Watch. En su lugar, utilice ng-change o una directiva personalizada.

    _¿Por qué? _: Los relojes son más difíciles de probar y también son perjudiciales para el rendimiento porque se evalúan en cada ciclo de $ 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() {
      }
    }
    

Todos 12 comentarios

PR si quieres

Entonces, ¿crees que debería escribir sobre los problemas usando controller as con $scope.$watch o debería introducir la notación de funciones como

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

reemplazando el ejemplo anterior o debería comparar ambos?

Si entiendo su estructura, compararía ambos y usaría su sintaxis recomendada y evitada.

Brrrr. Observando dentro de un controlador un anti-patrón. Realmente no lo necesita en este ejemplo de todos modos; sería mejor agregar enlace de eventos de cambio (y creo que eso es lo que harás en Ng2).

Preferiría que esta discusión sea una subsección de "ControllerAs" que comienza instando a la gente a evitar mirar dentro de un controlador. Luego, "si es necesario", optaría por la versión de exageraría demasiado los riesgos de evaluar la expresión 'vm.title'. Simplemente diga: "hágalo de esta manera".

¿Qué opinas de esta vista previa?

controllerAs y $ watch

[Estilo Y999 ] // ¿Cuál es el próximo número libre?

Nota: Cree relojes con precaución, ya que agregan más carga al ciclo de resumen. Utilice ngChange lugar.

  • use la notación de función de $scope.$watch para observar los cambios

_¿Por qué? _: El controlador podría estar vinculado a otro valor, luego vm

Entonces, si realmente necesita ver un valor, use este patrón:

  <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);
      });
  }

Hmmmm

Debe quedar claro que se debe evitar mirar en los controladores. use ngChange en su lugar. O mueva el reloj a una directiva. ¿pensamientos?

Luego, una nueva regla sobre cómo usar el reloj con controllerAs que reemplaza o actualiza lo que tengo allí.

De acuerdo contigo, John.

No está lo suficientemente claro que se deba evitar un reloj en un controlador y que se prefiera escuchar el evento de cambio O escribir una directiva. También debería tener un "por qué" para este consejo (por qué los relojes en los controladores son malos)

El consejo sobre cómo hacerlo _si es necesario_ debe ser un punto aparte y debe comenzar con una advertencia fuerte repetida en contra.

ENTONCES me gustaría ver un caso de por qué lo haría. No veo uno aquí. En realidad, no puedo pensar en uno. ¿Puedes?

Sin un ejemplo así, sería reacio a incluir este consejo en absoluto.

Además, el "por qué" de este texto me confundió. Es un "por qué" para la técnica específica de evitar la dependencia del nombre "vm". Eso es secundario al por qué real, que es la razón por la que alguna vez verías en un controlador. Solo tiene sentido si está precedido por un ejemplo de "no lo hagas de esta manera".

Más trabajo, sin duda, pero creo que es necesario.

propuesta a alguien?

Creo que esto resume la discusión.


controlador como $ reloj

[Estilo [Y999] (# style-y999)]
  • Evite usar $ scope. $ Watch. En su lugar, utilice ng-change o una directiva personalizada.

    _¿Por qué? _: Los relojes son más difíciles de probar y también son perjudiciales para el rendimiento porque se evalúan en cada ciclo de $ 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() {
      }
    }
    

¿Documenta el $ watch dentro de la directiva usando controllerAs? ¿Puede recomendar un enlace o recurso?

¿Alguien interesado en hacer relaciones públicas?

limpiar mis viejos problemas

¿Fue útil esta página
0 / 5 - 0 calificaciones