Warum ist die zwei-Wege Datenbindung in AngularJS ein antipattern?

AngularJS bietet zwei-Wege-Datenbindung.

Baute ich mehrere AngularJS-apps, und fand zwei-Wege-Datenbindung, um ein mächtiges feature, das erhöht meine Produktivität.

Kürzlich allerdings komme ich mehr und mehr über Beiträge und Artikel, die behaupten, dass die zwei-Wege-Datenbindung ist ein antipattern.

Beispiele:

Meisten Ressourcen argumentieren "Unidirektionale Datenfluss", wie es gefördert wird durch Reagieren/Flux.

Auch Angular2 angekündigt für einige Zeit, wird es keine zwei-Wege-Bindung... aber die aktuelle Dokumentation zeigt, dass es tatsächlich bietet zwei-Wege-Datenbindung über ngModel wieder (umgesetzt auf der Oberseite des property - und event-binding)

Allerdings habe ich noch nicht ganz verstehen die Probleme, die sich auf zwei-Wege-Datenbindung in AngularJS.

Andere client-Technologien (z.B. swing, eclipse-rcp, winforms, wpf,...) bieten auch zwei-Wege-Datenbindung und ich nie gestolpert, über die Behauptung, dass es ist ein anti-pattern ...

Gibt es eine kanonische Beispiel leicht verdeutlicht die Probleme, die entstehen aus zwei-Wege-Datenbindung in AngularJS?

Das video Ich die oben verlinkten scheint anzudeuten, dass $scope.watch ist das problem ... aber das Beispiel kann implementiert werden, ohne $scope.watch durch die Bindung an eine Funktion ausgesetzt auf der $scope.

Wenn Sie vermeiden Sie die Verwendung $scope (d.h. mit controller as), welche Probleme bleiben mit zwei-Wege-Datenbindung?

  • Die Sache mit zwei-Wege-Bindung ist, dass es feuert eine Kaskade der Ereignisse, die jedes mal, wenn es ausgelöst wird. Dies kann potenziell zu einem sehr großen Aufwand auf die simpelest Aktionen, die werden bleiben. Während es ist nicht direkt eine schlechte Sache, es ist von Natur aus eine Schwäche in jedem design. Es sei denn, Sie wissen genau, was Sie tun, es ist sehr einfach zu träge-code. AngularJS wurde wrestling mit, dass die design-Entscheidung, da es Anfang und es ist ein Grund, warum Eckig 2 eingerichtet wurde, auf eine andere Weise. Frameworks wie Reagieren und KnockOut sind monodirectional durch design.
  • Vielen Dank für Ihren Kommentar. Ihr argument ist im Grunde erklären, dass das zwei-Wege-Datenbindung ist schlecht implementiert AngularJS ... ist das wirklich der Grund, dass das "Konzept" der zwei-Wege-Datenbindung ist ein antipattern? Knockout bietet auch zwei-Wege-Datenbindung ... also es ist nicht ein anti-pattern, wenn mit Knock-out als Rahmen?
  • Ich denke, dass jeder, der fordert, zwei-Wege-Bindung eine anti-pattern würde behaupten, dass es spart der Ingenieur einige Zeit und Mühe nach vorne, auf Kosten der Anwendungs-performance, Wartbarkeit und Skalierbarkeit. Im Falle des Winkel-1.x, jeder digest-Zyklus löst eine Reihe von schmutzige checks und callbacks kann schnell aus der hand, wenn Sie nicht verstehen, wie und warum die Uhren Hinzugefügt. Zu sagen, dass es ein anti-pattern ist eine harte Kritik IMHO, aber ich kann sehen, warum einige Leute mögen es.
  • $scope.$watch ist für das manuelle erstellen von Uhren. 2-Wege-Datenbindung erstellt interne Uhren
  • Here ist ein Aktuelles gutes Beispiel, wie zwei-Wege-Datenbindung, die fehlerhaft sein können, in Eckige - nicht die Bindungen selbst, sondern ngModel Umsetzung. Die Notwendigkeit zum herausfiltern von Parasiten Werte von der anderen Seite (siehe internalChange flag) nicht viel hinzuzufügen Klarheit.
InformationsquelleAutor jbandi | 2016-02-13
Schreibe einen Kommentar