AngularJS提供雙向數據綁定。爲什麼AngularJS中的雙向數據綁定是反模式?
我建幾個AngularJS應用,發現雙向綁定是一個強大的功能,是提高我的工作效率。
然而最近我來了越來越多的跨聲稱雙向綁定是一個反帖子和文章。
例子:
- https://medium.com/este-js-framework/whats-wrong-with-angular-js-97b0a787f903#.py84tbylf
- https://www.dotnetrocks.com/?show=1147
- https://www.youtube.com/watch?v=DslsyqnyjQE
- Angular2 two-way data binding
大多數資源的主張,主張 「單向數據流」 就像它是由反應,和/提拔通量。
而且Angular2 announced一段時間不會有雙向綁定...但最新文件顯示,它實際上是提供two-way databinding via ngModel再次(在上實現性財產和事件結合)
但是我還沒有完全理解AngularJS中與雙向數據綁定相關的問題。
其他客戶端技術(即擺動,Eclipse的RCP,的WinForms,WPF ...)還提供雙向數據綁定,我從來沒有絆倒的要求,這是一個反模式...
有沒有一個規範的例子可以很容易地說明AngularJS中雙向數據綁定可能導致的問題?
The video我聯繫上面似乎暗示$scope.watch
是問題...但例如可以在不$scope.watch
通過結合暴露在$scope
的功能來實現。
如果您避免使用$scope
(即使用controller as
),雙向數據綁定仍存在哪些問題?
雙向綁定的事情是,它每次觸發時都會觸發級聯事件。這可能會對正在追蹤的最簡單的操作造成非常大的開銷。 雖然它不是一件壞事,但它在任何設計中本質上都是一個弱點。除非你確切地知道你在做什麼,否則編寫緩慢的代碼很容易。 AngularJS從設計決定開始就一直在努力,這也是Angular 2以不同方式建立的原因。像React和KnockOut這樣的框架在設計上是單向的。 – MartijnK
@MartijnK感謝您的評論。你的觀點基本上解釋了在AngularJS中雙向數據綁定實施不力......這真的是雙向數據綁定的「概念」是反模式的原因嗎? Knockout還提供了雙向數據綁定......所以在使用Knockout作爲框架時它不是反模式? – jbandi
我認爲任何調用雙向綁定反模式的人都會爭辯說,它會以犧牲應用程序性能,可維護性和可伸縮性爲代價,爲工程師節省一些時間和精力。對於Angular 1.x,每個摘要循環都會觸發一系列髒檢查和回調,如果您不知道如何以及爲何要添加手錶,可能會很快失去控制。說這是一個反模式是一個嚴厲的批評恕我直言,但我可以看到爲什麼有些人不喜歡它。 –