Polymer元素与Angular指令

28

我知道这个问题以前已经被问过,尤其是在这里

然而,答案对我来说似乎相当抽象,我发现自己在实际操作中非常困惑。

其中 .vs 的答案是:

Polymer(更正确地说是 Shadow DOM)创造了不仅可以组合 HTML 片段,而且还可以封装它们的能力。这是一个根本上新的功能,可以与任何其他模板系统或框架一起使用,以增强它们的功能。

这并没有告诉我太多东西,就我所理解的,Angular 指令在实践中基本上也可以做到同样的事情,虽然 Polymer 元素在性能方面可能会更高效一些。我相信“封装”在这个上下文中有某种更深层次的意义,但我没有领会到。

假设我正在开发一个 AngularJS Web 应用程序。何时、如何以及为什么要使用 Polymer 元素而不是 Angular 指令?

Polymer 元素是作为 Angular 指令的替代品使用,如果是这样,那么什么情况下会使用其中之一?或者 Angular 指令是基于 Polymer 元素实现的?

1个回答

32

你实际上是在问两件不同的事情,“实现/构建组件与使用组件有什么区别?”

使用组件

在可预见的未来中,您可以同时使用两者。无论使用哪个技术/库构建的Web组件或由哪个供应商制作,只需bower install(或类似操作),并使用适合您应用程序的组件即可。

重要的是,一切都将是DOM,意味着元素将无缝协同工作。这种互操作性很棒。以下是一个Angular指令数据绑定到Polymer元素的POC: http://ebidel.github.io/polymer-experiments/polymer-and-angular/together/


构建组件

目前构建元素的方法略有不同。 Polymer的方法是以所有Web组件为中心。 Angular是在Web组件时代之前构建的,因此情况有所不同。

  • Angular指令是构建自定义标签/组件的方式。 Polymer和Custom元素规范也是这样做的标准化方式。

  • 您如何构建Polymer元素是非常声明性的。 Angular指令大多在JS中定义(具有引用模板文件的能力)。

  • 因为Polymer元素使用Custom元素,所以继承很简单。我不确定Angular指令的继承情况/

  • Polymer元素使用Shadow DOM。这使它们拥有DOM和CSS的封装性。您在元素中定义的样式不会泄漏出来,页面样式也不会渗入其中。我可能错了,但是Angular指令没有任何样式封装概念。这是一个难题,Shadow DOM规范可以免费为我们提供。

  • 数据绑定的概念类似

Angular指令是否将以Polymer元素为基础实现?

  • 最终,Angular将采用一些正在发展中的Web组件标准。这对所有框架都是如此。Ember刚刚公布了他们的2014计划,其中包括Web组件。例如,Angular.dart已经在指令中使用Shadow DOM。

  • Polymer元素(自定义元素)默认情况下与其他自定义元素互操作。这是因为它们只是DOM。DOM元素很好地协同工作 :)

希望这能帮助您!


2
总之,使用Polymer自定义元素来构建组件,而使用Angular指令只是为现有组件添加行为? - ronag
1
所提供的示例似乎并没有进行真正的比较(Angular版本中存在不明确的idclass)。是否有任何简单的示例可以说明在Polymer中代码显着比Angular更短的情况? - Dmitri Zaitsev
@SvenMalvik 这个链接无法打开。但是从我的电子邮件中可以打开。我不明白怎么可能使用完全不同的组件来比较不同的情况。 - Dmitri Zaitsev

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