Angular JS如何与Google Closure相关?

现在AngularJS 1.0 已经发布了,我想知道这个项目是如何与来自Google, Closure的其他通用JavaScript框架/工具配合在一起的。

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

  • closures是一组可以单独使用的技术。 我觉得最吸引人的是:
    • Closure编译器似乎“修复JavaScript”的意义在于它提示了一些编译时检查(并不是所有人都这样,但也许大多数Google开发者都这么做,我也是这样)。 当然,最终的代码更小,更高效。
    • 然后是我喜欢的Closure Library的一些部分,例如对内置types( ArrayLike等)的抽象,基于类的系统,事件机制,DOM抽象等等。我不确定如果我喜欢GUI库或不(似乎相当复杂,我真的没有时间去研究它)。
    • 然后有一些function,我不认为我会发现有用的,例如模板
  • AngularJS ,我只是简单地读了一下,似乎比Closure要高得多。 它似乎是一个提供数据绑定,可重用组件,MVC结构等function的应用程序框架

所以这两个技术似乎是针对不同的抽象层次,所以我的第一个想法是,它们可以一起使用吗? closures提供低级别的编译器和浏览器抽象,而Angular提供应用程序级别的服务和结构? 它是否有意义,它会一起工作吗?

我知道唯一使用AngularJS的Google项目是DoubleClick团队。 (演示文稿)从本质上讲,他们仍然使用Google Closure Library来处理UI构build。 另外请注意,他们使用Google Closure编译器,但这几乎是一个给定的,“没有人”只使用没有编译器的库。

Google Closure库在其goog.ui命名空间中提供了一个UI框架。 这个框架在几乎所有方面都比较了Android,iOS,Swing和QT等非Web UI框架。 他们有一个东西,我喜欢在类固醇调用DOM元素, goog.ui.Component ,它有很多伟大的生命周期机制垃圾收集和事件监听等等。 你有像goog.ui.Control这样的东西,它是goog.ui.Control的子类,并且以一种非常有趣的方式处理用户交互。 例如,它可以让您插入渲染器,因此您可以将<button>更改为<a>而不更改除实际渲染之外的任何其他逻辑。

说到类和子类,Google Closure Library也有这个function。 你不必使用内置的一个,重要的部分是你以某种方式在你的方法中调用“超类”的原型。 例如,您可以使用CoffeeScript中的类系统,Google Closure Library不关心。

DoubleClick团队selectAngularJS的原因显然主要是由于AngularJS提供的数据绑定function。 Google Closure Library中没有内置任何内容可以在数据更改时自动更新UI。

因此,总结一下,Google Closure是一个混蛋兽,AngularJS可以代替Google Closure Library的goog.ui部分。

我认为AngularJS更像是一个坚实的MVC / MVVM框架,Closure Library是一组松散的组件,尽pipeAngularJS模板和Closure Templates都有很多共同之处。