AngularJS 提供两种方式的数据绑定。
我构建了几个 AngularJS 应用程序,发现双向数据绑定是一个强大的功能,它提高了我的工作效率。
然而,最近我越来越多地看到声称双向数据绑定是一种反模式的帖子和文章。
例子:
- https://medium.com/este-js-framework/whats-wrong-with-angular-js-97b0a787f903#.py84tbylf https://medium.com/este-js-framework/whats-wrong-with-angular-js-97b0a787f903#.py84tbylf
- https://www.dotnetrocks.com/?show=1147 https://www.dotnetrocks.com/?show=1147
- https://www.youtube.com/watch?v=DslsyqnyjQE https://www.youtube.com/watch?v=DslsyqnyjQE
- Angular2双向数据绑定 https://stackoverflow.com/questions/30468290/angular2-two-way-data-binding
大多数资源都支持“单向数据流”,就像 React/Flux 所提倡的那样。
还有 Angular2宣布 http://victorsavkin.com/post/110170125256/change-detection-in-angular-2一段时间以来,将不会有双向绑定......但最新的文档显示它实际上提供了通过 ngModel 进行双向数据绑定 https://angular.io/docs/ts/latest/guide/forms.html再次(在属性和事件绑定之上实现)
然而,我还没有完全理解与 AngularJS 中双向数据绑定相关的问题。
其他客户端技术(即 swing、eclipse-rcp、winforms、wpf ...)也提供双向数据绑定,而且我从未偶然发现它是反模式的说法...
是否有一个规范的示例可以轻松说明 AngularJS 中双向数据绑定可能导致的问题?
视频 https://www.youtube.com/watch?v=DslsyqnyjQE我上面链接似乎暗示$scope.watch
是问题......但是这个例子可以在没有$scope.watch
通过绑定到公开的函数$scope
.
如果您避免使用$scope
(即使用controller as
),双向数据绑定还存在哪些问题?
事实上,双向数据绑定的主要问题是性能。
当 AngularJS 发布时 (1),此功能是该框架被开发人员大量使用的最重要原因。
无需一行代码,您就可以通过从模型端或视图端更改元素的值来使元素完全动态化,该值在模型设置的任何地方都会更改。
在这个功能中,最重要的工具是观察,它代表了双向数据绑定的所有问题。
随着应用程序的发展,观察者和观察元素的数量不断增加。
而且,一段时间后,该应用程序可能会成为观察者的一大汤。
这将导致您的应用程序始终监视元素并保持反面元素的最新状态,这会消耗浏览器的大量资源。
这就是为什么我的建议是:尽可能避免观察者。
它们在控制器中几乎从来都不是真正必要的。
也可以看看 :
- 在 AngularJS 中避免监视的有效策略 https://www.accelebrate.com/blog/effective-strategies-avoiding-watches-angularjs/
- AngularJS 不好的部分 http://larseidnes.com/2014/11/05/angularjs-the-bad-parts/
- 大型 AngularJS 应用程序中的性能 https://www.airpair.com/angularjs/posts/angularjs-performance-large-applications
希望您能更清楚。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)