На странице Начало работы с 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 в будущем?
javascript
angularjs
polymer
Дэн Канзе
источник
источник
Ответы:
Вы не первый, кто задает этот вопрос :) Позвольте мне прояснить пару вещей, прежде чем перейти к вашим вопросам.
Polymer's
webcomponents.js
- это библиотека, которая содержит несколько полизаполнений для различных API-интерфейсов W3C, попадающих под зонтик веб-компонентов. Эти:<template>
Левая навигация в документации ( Polymer-Project.org ) содержит страницу для всех этих «технологий платформы». На каждой из этих страниц также есть указатель на отдельный полифилл.
<link rel="import" href="x-foo.html">
такое импорт HTML. Импорт - это полезный инструмент для включения HTML в другой HTML. Вы можете включить<script>
,<link>
разметку или что-либо еще в импорт.Ничто не "ссылается"
<x-foo>
на x-foo.html. В вашем примере предполагается, что определение пользовательского элемента<x-foo>
(например<element name="x-foo">
) определено в x-foo.html. Когда браузер видит это определение, оно регистрируется как новый элемент.На вопросы!
В чем разница между угловым и полимерным?
Мы рассказали об этом в нашем видео . В целом, Polymer - это библиотека, цель которой - использовать (и показать, как использовать) веб-компоненты. Его основой являются пользовательские элементы (например, все, что вы создаете, является веб-компонентом), и оно развивается по мере развития сети. Для этого мы поддерживаем только последнюю версию современных браузеров.
Я буду использовать это изображение для описания всего стека архитектуры Polymer:
КРАСНЫЙ слой: мы получаем завтрашнюю сеть через набор полифилов. Имейте в виду, что эти библиотеки со временем исчезают, так как браузеры принимают новые API.
ЖЕЛТЫЙ слой: посыпать сахар сахаром poly.js. Этот уровень является нашим мнением о том, как использовать спецификации API, вместе. Он также добавляет такие вещи, как привязка данных, синтетический сахар, средства отслеживания изменений, опубликованные свойства ... Мы считаем, что эти вещи полезны для создания приложений на основе веб-компонентов.
ЗЕЛЕНЫЙ: комплексный набор компонентов пользовательского интерфейса (зеленый слой) все еще находится в процессе разработки. Это будут веб-компоненты, которые используют все красные + желтые слои.
Угловые директивы против пользовательских элементов?
Смотрите ответ Алекса Рассела . По сути, Shadow DOM позволяет создавать фрагменты HTML, но также является инструментом для инкапсуляции этого HTML. Это принципиально новая концепция в Интернете, которую могут использовать другие платформы.
Какие проблемы решает Polymer, что AngularJS не имеет или не будет?
Сходства: декларативные шаблоны, привязка данных.
Различия: Angular имеет высокоуровневые API для сервисов, фильтров, анимации и т. Д., Поддерживает IE8 и на данный момент является гораздо более надежной средой для создания производственных приложений. Полимер только начинается в альфа.
Есть ли планы связать Polymer с AngularJS в будущем?
Это отдельные проекты . Тем не менее, команды Angular и Ember объявили, что в конечном итоге перейдут на использование API-интерфейсов базовой платформы в своих собственных средах.
^ Это огромная победа ИМО. В мире, где веб-разработчики имеют мощные инструменты (Shadow DOM, Custom Elements), авторы фреймворков также могут использовать эти примитивы для создания более качественных фреймворков. Большинство из них в настоящее время проходят через большие обручи, чтобы "сделать работу".
ОБНОВИТЬ:
На эту тему есть отличная статья: « Вот разница между Полимером и Углом »
источник
На ваш вопрос:
Из официального твиттер-аккаунта AngularJS: «angularjs будет использовать полимер для своих виджетов. Это беспроигрышный вариант»
источник: https://twitter.com/angularjs/status/335417160438542337
источник
Are there plans to tie Polymer in with AngularJS in the future?
я думаю, это хорошая идея - процитировать оригинальное сообщение от команды AngularJS, вы не думаете, ?В этом видео 2 парня из AngularJS рассказали о различиях и сходствах в этих двух фреймворках (AngularJS 1.2 и Beyond).
Эти ссылки приведут вас к правильным вопросам и ответам:
источник
1 и 2) Полимерные компоненты ограничены из-за их скрытого дерева в тени. Это означает, что их стиль и поведение не могут истекать кровью. Angular не относится к той конкретной директиве, которую вы создаете как полимерный веб-компонент. Угловая директива может конфликтовать с чем-то в вашей глобальной области видимости. ИМО, выгода, которую вы получите от полимера, - это то, что я объяснил ... модульные компоненты, которые имеют CSS и JavaScript для этого конкретного компонента, к которому ничто не может прикоснуться. Неприкасаемый ДОМ!
Можно создать угловые директивы, чтобы вы могли аннотировать элемент несколькими функциональными частями. В веб-компонентах Polymer это не так. Если вы хотите объединить функциональность компонентов, вы включаете два компонента в другой компонент (или заключаете их в другой компонент) или можете расширить существующий компонент. Помните, что главное отличие состоит в том, что каждый компонент ограничен полимерными веб-компонентами. Вы можете обмениваться css & js файлами между несколькими компонентами или можете встроить их.
3) Да, Angular планирует включить полимер в версию 2+ по словам Роба Додсона и Эрика Бидельмана
Забавно, что никто здесь не упомянул слово «сфера». Я думаю, что это одно из основных отличий.
Существует много отличий, но они также имеют много общего, когда речь идет о создании модульных элементов, похожих на лего, для приложения. Я думаю, можно с уверенностью сказать, что Angular будет основой приложения, и полимер может однажды жить в одном приложении вместе с дополнительными директивами, с основным отличием в том, что область применения, но полимер может заменить многие ваши текущие директивы. Но я не вижу причин, по которым Angular не может работать как есть, а также включать полимерные компоненты.
Читая ответы еще раз, пока я пишу это, я заметил, что Эрик Бидельман (Эбидель) сделал своего рода прикрытие в своем ответе :
«Shadow DOM позволяет создавать фрагменты HTML, но также является инструментом для инкапсуляции этого HTML».
Чтобы отдать должное, когда это необходимо, я получил ответы, послушав много интервью с Робом Додсоном и Эриком Бидельманом . Но я чувствую, что ответ не был сформулирован так, чтобы дать этому парню понимание, которого он хотел. С учетом сказанного, я думаю, что я затронул ответ, который он ищет, но никоим образом не обладаю большей информацией по этому вопросу, чем Роб Додсон и Эрик Бидельман.
Вот мои основные источники информации, которую я собрал.
JavaScript Jabber - Полимер с Робом Додсоном и Эриком Бидельманом
Shop Talk Show - Веб-компоненты с Робом Додсоном
источник
normalize.css
, это не нормализуется внутри теневого дома? Так что мне нужно отдельно нормализовать каждый такой компонент, без возможности сделать это один раз? Это хорошая вещь?normalize.css
или другие листы на основе тегов), что опять же легко достижимо без Shadow DOM. Согласитесь, не идеальная изоляция, но проблема. работает в 95% случаев, по крайней мере, тех, о которых я могу думать.« Веб-компоненты » - это новый набор стандартов, созданный на основе HTML 5, предназначенный для обеспечения многократно используемых строительных блоков для веб-приложений.
Браузеры находятся в различных состояниях реализации спецификации «Веб-компоненты», и поэтому слишком рано писать HTML с использованием веб-компонентов.
Но увы! Полимер на помощь! Polymer - это библиотека, которая обеспечивает уровень абстракции для вашего HTML-кода, позволяя ему использовать API веб-компонентов, как если бы он был полностью реализован во всех браузерах. Это называется poly- fill , и команда Polymer распространяет эту библиотеку как webcomponents.js . Это раньше называлось platform.js кстати.
Но Polymer - это больше, чем библиотека polyfill для веб-компонентов ...
Все элементы могут быть настроены и расширены. Они используются в качестве строительных блоков для чего угодно, от социальных виджетов до анимации и клиентов веб-API.
Полимер - это больше библиотека, чем каркас.
Polymer не поддерживает такие вещи, как маршруты, область применения, контроллеры и т. Д.
Хотя есть некоторые совпадения между Polymer и AngularJS, они не одинаковы. Фактически, команда AngularJS упоминала об использовании библиотек Polymer в будущих выпусках.
Также обратите внимание, что Polymer по-прежнему считается «передовым краем», пока AngularJS стабилизируется.
Будет интересно наблюдать за развитием обоих этих проектов Google!
источник
Я думаю, с практической точки зрения, в конце концов, шаблонная особенность угловых директив и методология веб-компонента, используемая полимером, решают одну и ту же задачу. Как я вижу, основные отличия заключаются в том, что полимер использует веб-API для включения фрагментов HTML, что является более синтаксически правильным и упрощенным способом достижения того, что Angular делает программно при визуализации шаблонов. Однако, как уже было сказано, Polymer - это небольшая структура для создания декларативных и интерактивных шаблонов с использованием компонентов. Он доступен только для разработки пользовательского интерфейса и поддерживается только в самых современных браузерах. AngularJS - это полная среда MVC, разработанная для декларирования веб-приложений с помощью привязок данных, зависимостей и директив. Это два совершенно разных животных. На ваш вопрос мне кажется, что в этот момент вы не получите существенного преимущества от использования полимера по сравнению с угловым, за исключением наличия десятков предварительно собранных компонентов, однако для этого все равно потребуется перенести их в угловые директивы. Однако в будущем, когда веб-API станут более продвинутыми, веб-компоненты полностью избавят от необходимости программно определять и создавать шаблоны, поскольку браузер сможет просто включать их аналогично тому, как он обрабатывает файлы javascript или css.
источник
MVVM (модель-представление, модель-представление), которую предлагает Angular, не является проблемой, которую Polymer стремится решить. Композиционная и повторно используемая природа, которую дают вам директивы Angular (пользовательская комбинация тег + связанная логика), является более разумным сравнением, если вы рассматриваете сравнение Angular и Polymer. Angular является и останется более широкой целевой системой.
источник
Для пользователя: не очень. Вы можете создавать потрясающие приложения с обоими.
Разработчику: они используют другой синтаксис, поэтому у любого решения есть довольно крутая кривая обучения. Angular существует дольше и имеет ОГРОМНОЕ сообщество, поэтому вам будет трудно найти проблемы, которые не были решены.
Для архитектора: очень разные. Angular - это прикладная среда, отвечающая за все аспекты вашей жизни. Он даже имеет директивы, вертикально интегрированные на тот случай, если вам нужны компоненты, подобные функциям. Полимер, с другой стороны, больше похож на оплату по мере использования. Вы хотите модальный, конечно, вы хотите интерактивный виджет, без проблем, вы хотите обработку маршрута, мы можем сделать это для. Polymer также более переносим в том, что Angular требует приложения Angular для повторного использования директив. Идея с Polymer заключается в том, чтобы быть более модулирующим и работать в других приложениях, даже в приложениях Angular.
Polymer - это подход к использованию новых стандартов веб-компонентов. Если локально поддерживаются такие функции, как пользовательские элементы, Shadow DOM и импорт HTML, было бы глупо не использовать их в своих интересах. В настоящее время большинство функций веб-компонентов не поддерживаются широко ( текущий статус ), поэтому Polymer действует как прокладка или мост. Вроде как полифилл (на самом деле он использует полифилы).
Мы использовали Angular и Polymer вместе более года. Частично решение сделать это было основано на обещаниях, данных непосредственно командой Polymer нам о том, что совместимость будет существовать. Мы отказались от этой идеи. Сейчас мы движемся к использованию только полимера.
Чтобы сделать это снова, мы, вероятно, вообще не стали бы использовать Polymer, вместо этого подождав, пока он созреет. При этом у Polymer есть свои плюсы (некоторые довольно хорошие) и минусы (некоторые довольно разочаровывающие), но я думаю, что это обсуждение для другой темы.
источник
Angularjs директиваэто подход для создания пользовательских элементов. Вы можете определить новые пользовательские теги с пользовательскими атрибутами. Polymer также может сделать это, но это будет интересно и более просто. Polymer на самом деле не каркас, а просто библиотека. Но мощная и удивительная библиотека, в которую вы можете влюбиться (как и я). Polymer позволит вам изучить нативную технологию веб-компонентов, созданную w3c, которую веб-браузеры в конечном итоге реализуют. Компонент it.web - это будущая технология, но полимер позволяет вам использовать эту технологию прямо сейчас. элементы и приложения с веб-компонентами. Помните, что я сказал, что Polymer - это не фреймворк, а библиотека. Но когда вы используете Polymer, ваш фреймворк - это DOM. этот пост был про angular js ver 1 и polymer, и я работал с обоими из них - мои проекты, и я лично предпочитаю polymer, а не angularjs. Но версия Angular 2 совершенно другая по сравнению с angularjs ver 1. Директива angular 2 имеет другое значение.
источник
Угловые директивы концептуально похожи на пользовательские элементы, но они реализованы без использования API веб-компонентов. Угловые директивы - это способ создания пользовательских элементов, но Polymer и спецификация веб-компонентов являются стандартным способом сделать это.
полимер-элемент:
Угловая директива:
источник