examples ejemplos descargar angularjs

ejemplos - angularjs pdf



¿Debo usar `this` o` $ scope`? (8)

Hay dos patrones en uso para acceder a las funciones del controlador: this y $scope .

¿Qué debo usar y cuándo? Entiendo que this está configurado para el controlador y $scope es un objeto en la cadena de alcance para las vistas. Pero con la nueva sintaxis "Controlador como Var", puede usar cualquiera de los dos fácilmente. Entonces, lo que pregunto es qué es lo mejor y cuál es la dirección para el futuro.

Ejemplo:

  1. Usando this

    function UserCtrl() { this.bye = function() { alert(''....''); }; }

    <body ng-controller=''UserCtrl as uCtrl''> <button ng-click=''uCtrl.bye()''>bye</button>

  2. Usando $scope

    function UserCtrl($scope) { $scope.bye = function () { alert(''....''); }; }

    <body ng-controller=''UserCtrl''> <button ng-click=''bye()''>bye</button>

Personalmente, encuentro this.name para que sea más fácil para la vista y más natural en comparación con otros patrones OO de Javascript.

¿Consejo por favor?


Prefiero una combinación.

Un simple console.log de $ scope y ''this'' después de rellenarlos con algunos datos simulados te lo mostrarán.

$ scope permite acceder a partes de un controlador, por ejemplo:

$$ChildScope: null; $$childHead: null; $$childTail: null; $$listenerCount: Object; $$listeners: Object; $$nextSibling: Scope; $$prevSibling: null; $$watchers: null; $$watcherCount: 0; $id: 2; $parent: Object; foo: ''bar'';

** No se recomienda que las propiedades y los métodos con $$ trabajen con el equipo de Angular, pero $ puede ser un juego seguro para hacer cosas geniales con $ parent y $ id.

''esto'' va directo al punto, adjuntando datos y funciones de enlace bidireccional. Solo verás lo que adjuntas:

foo: ''bar'';

Entonces, ¿por qué prefiero una combinación?

En las aplicaciones anidadas de ui-router, puedo acceder al controlador principal, configurar y llamar valores y funciones universales dentro de un controlador secundario:

En el controlador principal:

// Main Controller var mainCtrl = this; mainCtrl.foo = ''Parent at the bar'';

En el controlador infantil:

// Child Controller var mainCtrl = $scope.$parent.mainCtrl; var childCtrl = this; // update the parent from within the child childCtrl.underageDrinking = function(){ mainCtrl.foo = ''Child at the bar''; } // And then attach the child back to a property on the parent controller! mainCtrl.currentCtrl = childCtrl;

¡Ahora, puede acceder a los padres desde el niño y desde el padre!


"$ scope se está eliminando en Angular 2.0 de jason328" es una buena razón para mí. Y encontré otra razón para ayudarme a tomar la decisión: this es más legible : cuando veo fooCtrl.bar en HTML, de inmediato sé dónde encontrar la definición de bar .

Actualizaciones: no mucho después de cambiar a this solución, comencé a perder $scope manera que se necesita menos escritura


Ambos funcionan, pero si aplica las cosas que son apropiadas para el alcance al alcance $ y si aplica las cosas que son apropiadas para el controlador al controlador, su código será fácil de mantener. Para la gente que dice "Ugh, simplemente use el alcance, olvide este controlador como sintaxis" ... Puede funcionar igual, pero me pregunto cómo podrá mantener una gran aplicación sin perder el rastro de las cosas.


Ambos tienen sus usos. Primero, algo de historia ...

$ scope es la técnica "clásica", mientras que "controller as" es mucho más reciente (a partir de la versión 1.2.0 oficialmente, aunque apareció en versiones previas inestables antes de esto).

Ambos funcionan perfectamente bien y la única respuesta incorrecta es mezclarlos en la misma aplicación sin una razón explícita. Francamente, mezclarlos funcionará, pero solo aumentará la confusión. Así que elige uno y rueda con él. Lo más importante es ser consistente.

¿Cúal? Eso depende de usted. Hay muchos más ejemplos de $ scope, pero "controlador como" también está tomando fuerza. ¿Es uno mejor que el otro? Eso es debatible. Entonces, ¿cómo elegir?

Comodidad

Prefiero el "controlador como" porque me gusta ocultar el $ scope y exponer a los miembros del controlador a la vista a través de un objeto intermedio. Al configurar esto. *, Puedo exponer lo que quiero exponer desde el controlador a la vista. Puedes hacerlo con $ scope también, prefiero usar JavaScript estándar para esto. De hecho, lo codifico así:

var vm = this; vm.title = ''some title''; vm.saveData = function(){ ... } ; return vm;

Esto me parece más limpio y hace que sea fácil ver qué está siendo expuesto a la vista. Observe que nombro la variable que devuelvo "vm", que significa modelo de vista. Eso es sólo mi convención.

Con $ scope puedo hacer las mismas cosas, por lo que no estoy agregando o restando valor a la técnica.

$scope.title = ''some title''; $scope.saveData = function() { ... };

Así que depende de ti allí.

Inyección

Con $ scope, necesito inyectar $ scope en el controlador. No tengo que hacer esto con el controlador, a menos que lo necesite por alguna otra razón (como $ broadcast o relojes, aunque trato de evitar los relojes en el controlador).

ACTUALIZACIÓN Escribí esta publicación sobre las 2 opciones: http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/



La documentación angular le dice explícitamente que se recomienda usar this . Que, además del hecho de que se esté eliminando $scope es razón suficiente para que nunca use $scope .


Mi opinión es que ''esto'' en javascript tiene suficientes problemas por sí mismo, y que agregar otro significado / uso no es una buena idea.

Usaría $ scope, por el bien de la claridad.

ACTUALIZAR

Ahora existe la sintaxis ''controlador como'', que se discute here . No soy un fanático, pero ahora que es un constructo AngularJS más ''oficial'', merece algo de atención.


$scope se está eliminando en Angular 2.0. Por lo tanto, utilizar this sería un enfoque que otros quieren seguir a medida que se acerque la fecha de lanzamiento de Angular 2.0.