现在 AngularJS 1.0 is released我想知道这个项目如何与Google的其他通用JavaScript框架/工具 Closure 一起使用。

我只看过这两种技术的基本描述(并且阅读了有关Closure的书的大约一半),所以我没有直接的经验,但这对我来说是这样:

  • Closure是一组可以单独使用的技术。我发现最吸引人的地方是:
  • 关闭编译器在某种意义上可以“修复JavaScript”,即可以针对典型问题发出警告,它提供了一些编译时检查(并非所有人都喜欢,但大多数Google开发人员都可以这样做,我也这样做)。当然,生成的代码更小,更有效是一件很高兴的事情。
  • 然后我喜欢闭包库的某些部分,例如内置类型(ArrayLike等),基于类的系统,事件机制,DOM抽象等抽象。我不确定是否喜欢GUI库(似乎很复杂,但我实际上并没有有时间研究它)。
  • 然后有一些我认为不会有用的功能,例如模板
  • 我只简要阅读过的AngularJS 似乎比Closure高得多。它似乎是一个提供诸如数据绑定(bind),可重用组件,MVC结构等功能的应用程序框架。

  • 因此,这两种技术似乎针对的是完全不同的抽象水平,所以我的第一个想法是,可以将它们一起使用吗?闭包提供低级编译器和浏览器抽象,而Angular提供应用程序级服务和结构?这是否有意义,并且可以很好地协同工作?

    最佳答案

    我知道的唯一使用AngularJS的Google项目就是DoubleClick团队。 (presentation)本质上,除了UI构建之外,他们仍然使用Google Closure Library进行其他所有操作。另请注意,他们使用的是Google Closure Compiler,但这几乎是既定的,“没人”只使用Library而没有Compiler。

    Google Closure库在goog.ui命名空间中带有一个UI框架。该框架几乎可以与Android,iOS,Swing和QT等非Web UI框架进行比较。我喜欢将它们称为类固醇中的DOM元素goog.ui.Component,它具有很多很棒的生命周期机制,可以进行垃圾收集和事件监听等等。您拥有goog.ui.Control之类的东西,它是goog.ui.Component的子类,并且以非常有趣的方式处理用户交互。例如,它允许您插入渲染器,因此您可以将<button>更改为<a>,而无需更改除实际渲染之外的任何其他逻辑。

    说到类和子类,Google Closure库也有这个。您不必使用内置的,重要的部分是您可以在方法中以某种方式调用“父类(super class)”的原型(prototype)。例如,您可以使用CoffeeScript中的类系统,而Google Closure库不在乎。

    DoubleClick团队选择AngularJS的原因是apparently,主要是因为AngularJS提供了数据绑定(bind)功能。 Google Closure库中没有内置的功能可以在数据更改时自动更新用户界面。

    综上所述,Google Closure是一个巨大的野兽,AngularJS可以代替Google Closure库的goog.ui部分。

    关于client-side - Angular JS与Google Closure有何关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11054175/

    10-11 15:38