Angular JS如何与Google Closure相关?

时间:2012-06-15 15:53:20

标签: client-side google-closure angularjs

现在 AngularJS 1.0 is released我想知道这个项目如何与Google的其他通用JavaScript框架/工具相结合,关闭。< / p>

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

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

所以这两种技术似乎都针对不同的抽象层次,所以我的第一个想法是,它们可以一起使用吗?关闭提供低级编译器和浏览器抽象,而Angular提供应用程序级服务和结构?它会有意义并且能够很好地协同工作吗?

2 个答案:

答案 0 :(得分:36)

我所知道的唯一使用AngularJS的Google项目是DoubleClick团队。 (presentation)从本质上讲,除了UI构建之外,他们仍然使用Google Closure Library。另请注意,他们使用Google Closure Compiler,但这几乎是给定的,“nobody”只使用没有编译器的库。

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

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

DoubleClick团队选择AngularJS的原因是apparently,主要是因为AngularJS提供的数据绑定功能。 Google Closure Library中没有任何内置功能可以在数据更改时自动更新UI。

总而言之,Google Closure是一个huuuuge野兽,而AngularJS可以取代Google Closure Library的goog.ui部分。

答案 1 :(得分:3)

我认为AngularJS更像是一个可靠的MVC / MVVM框架,而Closure Library是一组松散的组件,尽管AngularJS TemplatesClosure Templates都有很多共同之处。