【问题标题】:How does Angular JS relate to Google Closure?Angular JS 与 Google Closure 有什么关系?
【发布时间】:2012-06-15 15:53:20
【问题描述】:

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

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

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

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

【问题讨论】:

标签: client-side google-closure angularjs


【解决方案1】:

我知道的唯一使用 AngularJS 的 Google 项目是 DoubleClick 团队。 (presentation) 从本质上讲,除了 UI 构建之外,他们仍然使用 Google Closure Library 进行所有操作。另请注意,他们使用 Google Closure 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 Library 也有这个。您不必使用内置的,重要的部分是您在方法中以某种方式调用“超类”的原型。例如,您可以使用 CoffeeScript 中的类系统,Google Closure Library 不在乎。

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

总而言之,Google Closure 是一头巨大的野兽,AngularJS 可以替代 Google Closure Library 的 goog.ui 部分。

【讨论】:

  • 我认为这是 Angular 的一大优势,免费的 2 路模型/ui 绑定。 Gary Bernhardt 谈到了 Closure 的精心设计。
  • 只是一个更新。我发现 Google Blockly 项目也使用 Angular 2.0 github.com/google/blockly/tree/master/accessible
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 2023-03-23
    • 2018-04-20
    • 2016-06-11
    • 2019-09-14
    • 2011-08-19
    • 2014-08-14
    • 2020-01-19
    相关资源
    最近更新 更多