45

现在AngularJS 1.0发布了,我想知道这个项目如何与谷歌的另一个通用 JavaScript 框架/工具Closure结合在一起。

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

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

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

4

2 回答 2

37

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

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

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

DoubleClick 团队选择 AngularJS 的原因显然很大程度上是因为 AngularJS 提供的数据绑定功能。Google Closure Library 中没有内置任何东西可以在数据更改时自动更新 UI。

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

于 2012-12-25T11:27:12.203 回答
3

我认为 AngularJS 更像是一个可靠的 MVC/MVVM 框架,而闭包库是一组松散的组件,尽管AngularJS 模板闭包模板有很多共同点。

于 2012-12-04T20:11:16.673 回答