¿Por qué se elimina el enlace de datos bidireccional en Angular 2? Si Angular 2.0 solo admite el enlace de datos unidireccional, ¿no fue el enlace bidireccional una característica importante de Angular 1? ¿Esto implica que de alguna manera la unión bidireccional en Angular 1 no fue una característica útil?

¡Tienes razón! El enlace de datos bidireccional fue literalmente una pieza de AngularJS. Podría decirse que la inyección de dependencias tuvo una mayor influencia en la dirección del desarrollo de aplicaciones web, pero eso es para otra pregunta.

Al igual que con muchas cosas en el mundo de la informática, el enlace de datos bidireccional (en adelante denominado 2WDB) no es correcto o incorrecto, es adecuado para una aplicación o no lo es.

2WDB es un método con un grado increíblemente alto de seguridad de que el modelo y el controlador están sincronizados, porque durante cada ciclo, se verifican entre sí. Es por eso que las aplicaciones de AngularJS con una gran cantidad de cosas en la pantalla pueden ser tan lentas, porque teóricamente puede haber miles de cosas que necesitan verificación.

El enlace de datos unidireccional es más rápido, ya que tiene una vista que se produce a partir de un modelo, pero reduce su seguridad de que la vista y el modelo son iguales. Por ejemplo, un usuario podría cambiar lo que se muestra en la pantalla, pero si eso no cambia en el modelo, la aplicación no lo sabe y la información incorrecta persistirá en la pantalla. Del mismo modo, las personas nefastas podrían infectar una computadora que muestra cosas distintas a las que la aplicación cree que se están mostrando.

Obviamente, se decidió que estas preocupaciones no eran lo suficientemente importantes como para seguir adelante con 2WDB, ya que cada marco principal ahora está usando 1WDB. Creo que esto se debe a que las mejoras de velocidad son demasiado significativas como para ignorarlas. Además, con 1WDB, un desarrollador malo no puede causar el daño que podría causar una aplicación 2WDB, como las aplicaciones AngularJS con alcances de $ 10,000. Una aplicación Angular mal escrita será mucho mejor que una aplicación AngularJS mal escrita.

Sostengo que 2WDB todavía tiene un propósito en pequeñas aplicaciones donde el mantenimiento rígido de la consistencia entre la vista y el modelo es crítico. Por ejemplo, preferiría esto en una aplicación financiera donde lo que se muestra debe suponerse con la mayor seguridad posible como correcto.

Pero seamos sinceros, el 99% de las aplicaciones que se desarrollan en estos marcos no son eso. En la gran mayoría de las implementaciones, los datos obsoletos están bien. Obviamente, un buen desarrollador siempre intentará mitigarlo, pero no la mantiene despierta por la noche.

Dado que Angular es un producto, deben atender al mercado más grande, y el mercado más grande es 1WDB.

No del todo cierto. Pregúntese, ¿por qué se dejaría de lado una característica tan grandiosa? Angular acaba de eliminar el contenedor del modelo, que es $ scope.

Sé que dirías “eso es lo que usé para el enlace de datos”, pero ¡oye! Fue un gran rendimiento por encima. Había un vigilante sobre él, un ciclo de digestión y una comprobación sucia y engorrosa. Aunque estas cosas se consideraban internas de angularJS, siempre tenía que lidiar con estas cosas incluso en sus aplicaciones pequeñas.

Entonces angularJS los eliminó. Pero, ¿cómo vas a obtener esta característica increíble? También hay ngModel para angular2: enlace de datos bidireccional en Angular 2. Pero no estás limitado a esto.

Bueno, una buena noticia es que hay bibliotecas que los desarrolladores de angular 2 pueden usar y deberían usar para el enlace de datos bidireccional. Como polímero, xtag y observe.js (Reaccione también). Estas bibliotecas son muy livianas y proporcionan una forma muy efectiva, eficaz y fácil para el enlace de datos bidireccional.

El ngModel de angular2 o las bibliotecas anteriores están muy bien optimizadas y hacen enlace de datos bidireccional en un componente particular a diferencia de hacerlo en todo el alcance en angularJS 1.x.

Nota interesante: debido a tecnologías como AngularJS1.xy EmberJS, una API principal de JS estará expuesta en ES7, es decir, Object.Observe () u Oo (). Esta es una API básica en JS, puede registrar sus variables en esto y vincularla con su vista. Pero esto nuevamente se hizo vigilando algos de angularJS 1.xy EmberJS. Más tarde, cuando React y Polymer se volvieron muy populares, y se abandonó toda la idea de Oo (). Entonces, incluso cuando tenga Oo () en ES7, no lo usará debido a bibliotecas inteligentes como React, Polymer, ObserveJS, X-Tag, etc. V8, el motor del chome, dejará de ser compatible con Oo (). Lea la discusión en ES Discuss – https://esdiscuss.org/topic/an-u… .

Todos están de acuerdo en que el enlace de datos bidireccional es una característica realmente buena. Pero cuando la aplicación se vuelve compleja, los ciclos de resumen se vuelven pesados ​​y esto conduce a la falta de respuesta en la interfaz de usuario.

No se cae, pero la forma de hacerlo es un poco más compleja ahora en angular 2.

Uso del enlace de datos bidireccional del Curso Aprenda AngularJS 2: Conceptos básicos

Mi punto de vista sobre cómo hacer que sea complejo es que el desarrollador debe pensar antes de usarlo, ya que provocará actualizaciones / renderizaciones de la interfaz de usuario y esas actualizaciones pueden ser pesadas.

En reaccionar también, puede hacer que funcione como enlace de datos de 2 vías, pero el flujo de datos será unidireccional.

En términos generales, Angular lo obliga a especificar enlaces bidireccionales o enlaces únicos. Sin embargo, el aspecto bidireccional se usa principalmente para controles de entrada donde el control y el modelo pueden actualizarse entre sí. Creo que en la mayoría de mi código solo necesito un enlace unidireccional entre el modelo y el DOM. La mayoría de las veces no estoy capturando entradas que deben aplicarse nuevamente al DOM. Por lo tanto, considero que el modelo de enlace bidireccional es innecesario la mayor parte del tiempo considerando el impacto en el rendimiento.
Algunas reflexiones más aquí: Experiencias con Angular

Lo sé … es una de esas cosas que crees que fue genial y luego destruyó: “Impresionante, hombre de enlace de datos bidireccional, no más getElementById y haga clic en eventos de mierda …” y quizás sobrevendido como dicen algunas personas.

Ahora a las personas que se ponen al día con el marco JS se les dice “¡aah no !, ese es el hombre pasado, el enlace de datos unidireccional es mejor porque es más eficiente” … ay.

La realidad para mí es que si tiene una aplicación relativamente pequeña, el enlace de datos bidireccional le ahorra mucho tiempo y es fácil de entender, fácil de codificar. Aunque cuando tiene una aplicación de una sola página y depende por completo de un controlador para representar la página, sus recursos se sumarán y verá algún problema de rendimiento.

Puede resolver esto parcialmente mediante:

– evitando poner demasiadas variables en $ rootScope
– Tener páginas simples con sus propios controladores: una vez que el alcance cambia, los recursos se liberarán.
– el último. No sé si es una buena práctica, pero me funciona: en lugar de tener una aplicación monolítica de una sola página, utilizo varias aplicaciones de una sola página, por lo tanto, el alcance $ no es tan grande y los recursos se liberan.

De acuerdo con la sintaxis de plantilla Angular 2 – Angular 2, dado que Angular 2 solo ejecuta automáticamente los enlaces [propiedad], el comportamiento de enlace de eventos (propertyChange) es mucho más predecible. La directiva interna o componente activa el evento explícitamente con la sintaxis propertyChange.emit (propiedad). Y el caso “simple” de los enlaces bidireccionales de solo datos todavía se puede representar mediante la sintaxis [(propiedad)] en el componente externo.

La separación de estas preocupaciones también las hace más poderosas porque puede ejecutar código arbitrario con la sintaxis (propertyChange) = “onPropertyChanged ($ event)”.

No se deja caer. El enlace de datos bidireccional todavía está disponible en Angular2. Sin embargo, funciona de manera diferente que en Angular 1, y NO se recomienda para todas (o incluso la mayoría) de las situaciones. No porque haya algo malo en ello, simplemente no lo necesitas todo el tiempo. En muchos casos, solo necesita el enlace de datos unidireccional en una dirección u otra. La unión bidireccional se realiza simplemente como una combinación de estos dos métodos.

Aquí, tenemos un enlace de evento en el evento de clic Angular2:

Aquí, tenemos un enlace de propiedad sobre la propiedad de valor.

Aquí tenemos un enlace de datos bidireccional con ngModel:

Enlace de datos bidireccional en Angular 2

Creamos una red social completa basada en angularjs ( http://bitlanders.com versión iniciada), y después de dos años de desarrollo, puedo decirle que el enlace bidireccional de forma predeterminada mata el rendimiento de una aplicación enorme como esa, especialmente para el desplazamiento infinito (no se escala en absoluto).

Confiamos en la directiva de enlace fabuloso una vez y luego en la función de enlace unidireccional que se encuentra en la versión 1.3, ¡eso fue enviado por Dios!

Creo que dejar de usar la función no es una buena opción, un buen equilibrio sería vinculante de una forma por defecto y vinculante de dos vías a pedido.

Pero supongo que angularjs 2 es solo una marca, no está relacionado tanto con el angular 1 …

Mi explicación simplista: el enlace de datos bidireccional es difícil de depurar. He creado aplicaciones Angular, Backbone y React. React y Backbone son mucho más fáciles de depurar. React utiliza Flux para una arquitectura y un enlace de datos específicamente unidireccional, y a mi equipo y a mí nos pareció muy fácil de depurar.

En Angular 2, debe usar paréntesis dentro de los corchetes (conocido como “banana en una caja”) para el enlace de datos bidireccional. Este cambio se debe en gran parte al nuevo flujo de datos unidireccionales que Angular 2 ha adoptado.

{{message}}

El objetivo principal de la unión bidireccional en angular era mostrar cambios dinámicos en la vista cada vez que cambian los datos. Lo que se puede lograr usando el enlace de 1 vía (unidireccional) también.

La unión bidireccional surgió con la desventaja de un gran número de observadores en el dom. que estaba ralentizando la aplicación. y por lo tanto se dejó caer.

Lo sé … es una de esas cosas que crees que fue genial y luego destruyó: “Impresionante, hombre de enlace de datos bidireccional, no más getElementById y haga clic en eventos de mierda …” y tal vez sobrevendido como dicen algunas personas. Ahora a las personas que se ponen al día con el marco JS se les dice “¡aah no !, ese es el hombre pasado, el enlace de datos unidireccional es mejor porque es más eficiente” … ay.