AngularJS提供了双向数据绑定(bind)。

我构建了几个AngularJS应用,发现双向数据绑定(bind)是一项强大的功能,提高了我的工作效率。

但是最近,我越来越多地在帖子和文章中提到双向数据绑定(bind)是一种反模式。

例子:

  • 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

  • 大多数资源都主张像React/Flux提倡的那样“单向数据流”。

    Angular2 announced在一段时间内也没有双向绑定(bind)...但是最新文档显示它实际上又在提供two-way databinding via ngModel(在属性和事件绑定(bind)之上实现)

    但是我还没有完全理解与AngularJS中的双向数据绑定(bind)有关的问题。

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

    是否有一个规范的示例可以轻松地说明AngularJS中双向数据绑定(bind)可能导致的问题?

    我上面链接的The video似乎暗示了$scope.watch是问题所在……但是可以通过绑定(bind)到$scope.watch上公开的函数来在没有$scope的情况下实现该示例。
    如果您避免使用$scope(即使用controller as),则双向数据绑定(bind)仍然存在哪些问题?

    最佳答案

    实际上,双向数据绑定(bind)的主要问题是性能。

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

    无需一行代码,您可以通过从模型端或 View 端更改其值来使元素完全动态,在设置模型的任何地方都可以更改该值。

    在此功能中,最重要的工具是监视,它代表了双向数据绑定(bind)的所有问题。

    随着应用程序的发展,观察者和被观察元素的数量增加。
    而且,一段时间后,该应用程序可能会成为观看者的一大汤匙。
    这将导致您的应用程序总是在反面监视元素并保持最新,并且这会消耗浏览器的大量资源。

    这就是为什么我的建议是:尽可能避免观看者。
    在 Controller 中几乎从来没有真正需要它们。

    也可以看看 :

  • Effective strategies to avoid watches in AngularJS
  • The bad parts of AngularJS
  • Performances in large AngularJS applications

  • 希望对您来说更清楚。

    关于javascript - 为什么AngularJS中的双向数据绑定(bind)是反模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35379515/

    10-11 22:26
    查看更多