Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between Polymer elements and AngularJS directives?

On the Polymer Getting Started page, we see an example of Polymer in action:

<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> 

What you will notice is <x-foo></x-foo> being defined by platform.js and x-foo.html.

It seems like this is the equivalent to a directive module in 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) {         }     }; }); 
  • What is the difference between the two?

  • What problems does Polymer solve that AngularJS has not or will not?

  • Are there plans to tie Polymer in with AngularJS in the future?

like image 352
Dan Kanze Avatar asked Aug 06 '13 19:08

Dan Kanze


People also ask

What is the difference between angular and polymer?

Angular is an application level framework and Polymer is the library to create web components. Angular development is mainly used to build CRUD apps, although Polymer Web component too could be arranged to develop the application.

What is the difference between directive and component in AngularJS?

Component is used to break up the application into smaller components. But Directive is used to design re-usable components, which is more behavior-oriented. That is why components are widely used in later versions of Angular to make things easy and build a total component-based model.

What is a AngularJS directive?

AngularJS directives are extended HTML attributes with the prefix ng- . The ng-app directive initializes an AngularJS application. The ng-init directive initializes application data. The ng-model directive binds the value of HTML controls (input, select, textarea) to application data.

Can you use polymer with angular?

Yes, you can use Angular 2.0 and Polymer together by incorporating Polymer custom elements into an Angular 2.0 application. Web components include attributes, they emit events, and can also contain child elements.


2 Answers

You're not the first to ask this question :) Let me clarify a couple of things before getting to your questions.

  1. Polymer's webcomponents.js is a library that contains several polyfills for various W3C APIs that fall under the Web Components umbrella. These are:

    • Custom Elements
    • HTML Imports
    • <template>
    • Shadow DOM
    • Pointer Events
    • others

    The left-nav in the documentation (polymer-project.org) has a page for all of these "Platform technologies". Each of those pages also has a pointer to the individual polyfill.

  2. <link rel="import" href="x-foo.html"> is an HTML Import. Imports are a useful tool for including HTML in other HTML. You can include <script>, <link>, markup, or whatever else in an import.

  3. Nothing "links" <x-foo> to x-foo.html. In your example, it's assumed the Custom Element definition of <x-foo> (e.g. <element name="x-foo">) is defined in x-foo.html. When the browser sees that definition, it's registered as a new element.

On to questions!

What is the difference between Angular and Polymer?

We covered some of this in our Q&A video. In general, Polymer is a library that aims to use (and show how to use) Web Components. Its foundation is Custom Elements (e.g. everything you build is a web component) and it evolves as the web evolves. To that end, we only support the latest version of the modern browsers.

I'll use this image to describe Polymer's entire architecture stack:

enter image description here

RED layer: We get tomorrow's web through a set of polyfills. Keep in mind, those libraries go away over time as browsers adopt the new APIs.

YELLOW layer: Sprinkle in some sugar with polymer.js. This layer is our opinion on how to use the spec'd APIs, together. It also adds things like data-binding, syntatic sugar, change watchers, published properties...We think these things are helpful for building web component-based apps.

GREEN: The comprehensive set of UI components (green layer) is still in progress. These will be web components that use all of the red + yellow layers.

Angular directives vs. Custom Elements?

See Alex Russell's answer. Basically, Shadow DOM allows composing bits of HTML but also is a tool for encapsulating that HTML. This is fundamentally a new concept on the web and something other frameworks will leverage.

What problems does Polymer solve that AngularJS has not or will not?

Similarities: declarative templates, data binding.

Differences: Angular has high level APIs for services, filters, animations, etc., supports IE8, and at this point, is a much more robust framework for building production apps. Polymer is just starting out in alpha.

Are there plans to tie Polymer in with AngularJS in the future?

They're separate projects. That said, both the Angular and Ember teams announced they'll eventually move to using the underlying platform APIs in their own frameworks.

^ This is a huge win IMO. In a world where web developers have powerful tools (Shadow DOM, Custom Elements), framework authors also can utilize these primitives to create better frameworks. Most of them currently go through great hoops to "get the job done".

UPDATE:

There's a really great article on this topic: "Here’s the difference between Polymer and Angular"

like image 63
ebidel Avatar answered Oct 08 '22 06:10

ebidel


For your question:

Are there plans to tie Polymer in with AngularJS in the future?

From the official twitter account of AngularJS : "angularjs will use polymer for its widgets. It's win-win"

source : https://twitter.com/angularjs/status/335417160438542337

like image 29
loïc m. Avatar answered Oct 08 '22 05:10

loïc m.