Polymer元素和AngularJS指令有什么区别?
在Polymer入门页面上,我们看到Polymer实例的一个示例:
<html>
<head>
<!-- 1. Shim missing platform features -->
<script src="polymer-all/platform/platform.js"></script>
<!-- 2. Load a component -->
<link rel="import" href="x-foo.html">
</head>
<body>
<!-- 3. Declare the component by its tag. -->
<x-foo></x-foo>
</body>
</html>
你会注意到<x-foo></x-foo>
由platform.js
和x-foo.html
定义。
看起来这与AngularJS中的指令模块等价:
angular.module('xfoo', [])
.controller('X-Foo', ['$scope',function($scope) {
$scope.text = 'hey hey!';
})
.directive('x-foo', function() {
return {
restrict: 'EA',
replace: true,
controller: 'X-Foo',
templateUrl: '/views/x-foo.html',
link: function(scope, controller) {
}
};
});
两者有什么区别?
Polymer解决了AngularJS没有或没有的问题?
是否有计划将Polymer与AngularJS绑定在一起?
你不是第一个问这个问题的人:)在解决你的问题之前,让我澄清一些事情。
Polymer的webcomponents.js
是一个库,它包含几个用于各种W3C API的webcomponents.js
,它们属于Web Components伞。 这些是:
<template>
文档中的左侧导航栏(polymer-project.org)为所有这些“平台技术”提供了一个页面。 每个页面还有一个指向单个polyfill的指针。
<link rel="import" href="x-foo.html">
是一个HTML导入。 导入是在其他HTML中包含HTML的有用工具。 您可以在导入中包含<script>
, <link>
,标记或其他任何内容。
没有将“ <x-foo>
”链接到x-foo.html。 在你的例子中,假定x-foo.html中定义了<x-foo>
的自定义元素定义(例如<element name="x-foo">
)。 当浏览器看到该定义时,它被注册为一个新元素。
在问题上!
Angular和Polymer有什么区别?
我们在Q&A视频中介绍了其中的一些内容。 一般来说,Polymer是一个旨在使用(并显示如何使用)Web组件的库。 它的基础是自定义元素(例如,您构建的所有内容都是Web组件),并随着Web的发展而演变。 为此,我们只支持最新版本的现代浏览器。
我将用这张图片来描述Polymer的整个架构堆栈:
RED层:我们通过一组polyfills获取明天的网页。 请记住,随着浏览器采用新的API,这些库随着时间推移而消失。
黄色层:用polymer.js撒上一些糖。 这一层是我们关于如何一起使用spec'd API的意见。 它还增加了数据绑定,合成糖,变化观察者,发布的属性等内容......我们认为这些东西对构建基于Web组件的应用程序很有帮助。
绿色:全套UI组件(绿色层)仍在进行中。 这些将是使用所有红色+黄色图层的Web组件。
Angular指令与自定义元素?
见Alex Russell的答案。 基本上,Shadow DOM允许组成HTML的一部分,但也是封装该HTML的工具。 这基本上是网络上的一个新概念,而其他框架将利用这个概念。
Polymer解决了AngularJS没有或没有的问题?
相似之处:声明性模板,数据绑定。
差异:Angular具有用于服务,过滤器,动画等的高级API,支持IE8,并且在这一点上,它是用于构建生产应用程序的更加健壮的框架。 聚合物刚刚开始alpha。
是否有计划将Polymer与AngularJS绑定在一起?
他们是单独的项目。 也就是说,Angular和Ember团队都宣布他们最终将转向在其自己的框架中使用底层平台API。
^这是一个巨大的胜利IMO。 在Web开发人员拥有强大工具(Shadow DOM,自定义元素)的世界中,框架作者还可以利用这些原语创建更好的框架。 他们中的大多数人目前正在经历艰难的工作,“完成工作”。
更新:
关于这个话题有一篇非常棒的文章:“Polymer和Angular的区别在于”
对于你的问题:
是否有计划将Polymer与AngularJS绑定在一起?
来自AngularJS的官方Twitter账号:“angularjs将使用聚合物作为它的小部件,这是双赢的”
来源:https://twitter.com/angularjs/status/335417160438542337
在这个视频中,来自AngularJS的两个人谈论了关于这两个框架(AngularJS 1.2和Beyond)的差异和相似之处。
这些链接将为您带来正确的问答:
上一篇: What is the difference between Polymer elements and AngularJS directives?