为什么AngularJS中的双向数据绑定是反模式?

jba*_*ndi 21 javascript data-binding angularjs

AngularJS提供双向数据绑定.

我构建了几个AngularJS应用程序,发现双向数据绑定是一个强大的功能,可以提高我的工作效率.

然而,最近我越来越多的帖子和文章声称双向数据绑定是反模式.

例子:

大多数资源支持"单向数据流",就像React/Flux推动的那样.

Angular2也宣布一段时间没有双向绑定......但是最新的文档显示它实际上是通过ngModel再次提供双向数据绑定(在属性和事件绑定之上实现)

但是,我还没有完全理解与AngularJS中的双向数据绑定相关的问题.

其他客户端技术(即swing,eclipse-rcp,winforms,wpf ......)也提供双向数据绑定,我从来没有偶然发现它是一个反模式...

是否有一个规范的例子可以很容易地说明AngularJS中双向数据绑定可能导致的问题?

我上面链接的视频似乎暗示这$scope.watch是问题...但是这个例子可以在不$scope.watch通过绑定到公开的函数的情况下实现$scope.
如果避免使用$scope(即使用controller as),双向数据绑定会出现什么问题?

cha*_*asr 10

实际上,双向数据绑定的主要问题是性能.

当AngularJS发布时(1),此功能是开发人员大量使用该框架的首要原因.

如果没有一行代码,您可以通过从模型侧或视图侧更改其值来使元素完全动态化,在设置模型的任何位置都会更改该值.

在这个功能中,最重要的工具是观看,它代表了双向数据绑定的所有问题.

随着应用程序的发展,观察者和观察者的数量也在增加.
此外,一段时间后,应用程序可以成为观察者的大汤.
这将导致您的应用程序始终关注元素并在反面保持最新元素,并从浏览器中消耗大量资源.

这就是为什么我的建议是:尽可能避免观察者.
在控制器中几乎不需要它们.

也可以看看 :

希望对你来说更清楚.

  • 正如@MartijnK在评论中指出的那样,触发事件的级联基本上就是问题所在.Angular.js假设事件是非纯的(即可能会更改状态/模型),因此Angular始终假定在每个事件之后所有数据都可能已更改. (2认同)