Polymer元素 vs Angular指令
Polymer元素 vs Angular指令
我知道之前已经有人问过这个问题,尤其是这里。
然而,答案对我来说相当抽象,我在实践中感到相当困惑。
它们似乎的答案是:
Polymer(更确切地说,Shadow DOM)创造了一种不仅可以组成 HTML 的能力,而且可以封装它们。这是一种全新的能力,可以与任何其他模板系统或框架一起使用,以增强它们的能力。
这并没有告诉我太多,就我所知道的,AngularJS 指令在实践中也做类似的事情,虽然 polymer 元素可能在性能方面更加高效。我相信,“封装”在这个上下文中有一些深层含义,我还没有理解。
假设我正在开发一个 AngularJS Web 应用程序。何时、如何以及为什么会使用 polymer 元素而不是 angular 指令?
如果使用 polymer 元素,它们是用来代替 angular 指令的吗?如果是,那么什么情况下会使用其中之一?还是说 angular 指令是基于 polymer 元素实现的?
你其实在问两件不同的事情, "构建组件与使用组件之间有什么区别?"
使用组件
在可预见的未来,你会同时使用两者。无论一个Web组件是用什么技术/库构建的或者哪个供应商制作的,只需要bower install
(或类似) 并使用对你的应用程序有意义的组件即可。
重要的是一切都将是DOM,这意味着元素可以无缝地一起工作。互操作性很棒。这是一个Angular指令的POC,它是与Polymer元素数据绑定的: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元素(custom元素)默认可以与其他自定义元素进行互操作。这是因为它们只是DOM。DOM元素可以很好地一起工作:)
希望对你有所帮助!