Angular JS和Google Closure有什么关系?

45
现在 AngularJS 1.0 已经发布,我想知道这个项目如何与 Google 的另一个通用 JavaScript 框架/工具Closure相结合。
我只看到了这两种技术的基本描述(并阅读了 Closure 一半的书),所以我没有直接的经验,但是从我的角度来看,情况是这样的:
闭包是一组可以单独使用的技术。我发现最吸引人的可能是:
Closure Compiler,它似乎可以“修复JavaScript”,因为它会警告典型问题,提供一些编译时检查(不是所有人都喜欢这个,但可能大多数谷歌开发人员和我也喜欢)。当然,结果代码更小更高效也很好。
然后,还有Closure Library的一些部分,例如内置类型的抽象(ArrayLike等),基于类的系统,事件机制,DOM抽象等。我还不确定我是否喜欢GUI库(似乎相当复杂,我还没有时间学习)。
然后,还有一些我认为不太有用的功能,例如模板。
AngularJS似乎比Closure高级得多,我只简单地了解过它。它似乎是一个应用程序框架,提供数据绑定,可重用组件,MVC结构等功能。

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


6
https://dev59.com/Vmgu5IYBdhLWcg3w2ahm#11041786 - Vojta
2个回答

37
我所知道的唯一使用AngularJS的Google项目是DoubleClick团队。(演示)实质上,他们仍然在所有地方使用Google Closure库,除了UI构建。还要注意的是,他们使用Google Closure编译器,但这几乎是必须的,“没有人”只使用库而不使用编译器。
Google Closure库在其goog.ui命名空间中带有一个UI框架。这个框架在几乎所有方面都类似于非Web UI框架,如Android、iOS、Swing和QT。它们有一种我喜欢称之为DOM元素的“类固醇”,即goog.ui.Component,它具有许多用于垃圾收集、事件侦听等方面的生命周期机制。您可以使用像goog.ui.Control这样的东西,它是goog.ui.Component的子类,并以非常有趣的方式处理用户交互。例如,它允许您插入渲染器,因此您可以将<button>更改为<a>,而不需要更改除实际呈现之外的任何逻辑。
说到类和子类,Google Closure库也有这个功能。您不必使用内置的那个,重要的是您以某种方式在方法中调用“超类”的原型。例如,您可以在CoffeeScript中使用类系统,Google Closure库并不关心。
DoubleClick团队选择AngularJS的原因显然主要是因为AngularJS提供的数据绑定功能。Google Closure库中没有任何内置函数自动更新UI当数据发生更改时。
因此,总结一下,Google Closure是一个庞大的野兽,而AngularJS可以替换Google Closure库的goog.ui部分。

我认为这是Angular的一个巨大优势,即免费的双向模型/UI绑定。Gary Bernhardt谈论了Closure的设计精良。 - Steven Almeroth
只是一个更新。我发现谷歌的Blockly项目也使用了Angular 2.0 https://github.com/google/blockly/tree/master/accessible - Guillaume Malartre

3

我认为AngularJS更像一个稳定的MVC/MVVM框架,而Closure Library则是一组松散的组件,尽管AngularJS模板Closure模板有很多共同点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接