AngularJS
AngularJS | |
---|---|
![]() | |
Тип | фреймворк, библиотека JavaScript и библиотека функций |
Разработчики | Brat Tech LLC, Google Inc. и сообщество |
Написана на | JavaScript[1] |
Первый выпуск | 2009 |
Аппаратная платформа | Web-платформа |
Последняя версия | 1.7.2 (12 июня 2018 ) |
Репозиторий | github.com/angular/angul… |
Состояние | Active |
Лицензия | лицензия MIT[2][3] |
Сайт | angularjs.org angular.io |
![]() |
AngularJS — JavaScript-фреймворк с открытым исходным кодом. Предназначен для разработки одностраничных приложений[4]. Его цель — расширение браузерных приложений на основе MVC-шаблона, а также упрощение тестирования и разработки.
Фреймворк работает с HTML, содержащим дополнительные пользовательские атрибуты, которые описываются директивами, и связывает ввод или вывод области страницы с моделью, представляющей собой обычные переменные JavaScript. Значения этих переменных задаются вручную или извлекаются из статических или динамических JSON-данных.
История разработки
AngularJS разработан в 2009 году Мишко Хевери и Адамом Абронсом в Brat Tech LLC как программное обеспечение позади сервиса хранения JSON-данных, измеряющихся мегабайтами, для облегчения разработки корпоративных приложений. Сервис располагался на домене «GetAngular.com» и имел нескольких зарегистрированных пользователей, прежде чем они решили отказаться от идеи бизнеса и выпустить Angular как библиотеку с открытым исходным кодом.
Абронс покинул проект, но Хевери, работающий в Google, продолжает развивать и поддерживать библиотеку с другими сотрудниками Google Игорем Минаром и Войта Джином.
Философия Angular
AngularJS спроектирован с убеждением, что декларативное программирование лучше всего подходит для построения пользовательских интерфейсов и описания программных компонентов[5], в то время как императивное программирование отлично подходит для описания бизнес-логики[6]. Фреймворк адаптирует и расширяет традиционный HTML, чтобы обеспечить двустороннюю привязку данных для динамического контента, что позволяет автоматически синхронизировать модель и представление. В результате AngularJS уменьшает роль DOM-манипуляций и улучшает тестируемость.
Цели разработки
- Отделение DOM-манипуляции от логики приложения, что улучшает тестируемость кода.
- Отношение к тестированию как к важной части разработки. Сложность тестирования напрямую зависит от структурированности кода.[7][8]
- Разделение клиентской и серверной стороны, что позволяет вести разработку параллельно.
- Проведение разработчика через весь путь создания приложения: от проектирования пользовательского интерфейса, через написание бизнес-логики, к тестированию.
Angular придерживается MVC-шаблона проектирования и поощряет слабую связь между представлением, данными и логикой компонентов. Используя внедрение зависимости, Angular переносит на клиентскую сторону такие классические серверные службы, как видозависимые контроллеры. Следовательно, уменьшается нагрузка на сервер и веб-приложение становится легче.
Популярные встроенные Angular-директивы
С помощью директив AngularJS можно создавать пользовательские HTML-теги и атрибуты, чтобы добавить поведение некоторым элементам.[9]
- ng-app
- Объявляет элемент корневым для приложения.[10]
- ng-bind
- Автоматически заменяет текст HTML-элемента на значение переданного выражения.
- ng-model
- То же что и ng-bind, только обеспечивает двустороннее связывание данных.[11] Изменится содержимое элемента, ангуляр изменит и значение модели. Изменится значение модели, ангуляр изменит текст внутри элемента.
- ng-class
- Определяет классы для динамической загрузки.
- ng-controller
- Определяет JavaScript-контроллер для вычисления HTML-выражений в соответствии с MVC.[12]
- ng-repeat
- Создает экземпляр DOM для каждого элемента из коллекции.[13]
- ng-show и ng-hide
- Показывает или скрывает элемент в зависимости от значения логического выражения.
- ng-switch
- Создает экземпляр шаблона из множества вариантов, в зависимости от значения выражения.
- ng-view
- Базовая директива, отвечает за обработку маршрутов[14], которые принимают JSON перед отображением шаблонов, управляемых указанными контроллерами.
- ng-if
- Удаляет или создает часть DOM-дерева в зависимости от значения выражения. Если значение выражения, назначенного ngIf, равно false, элемент удаляется из DOM, иначе — вновь клонированный элемент вставляется в DOM.[15]
Также существует возможность создавать настраиваемые директивы, используя в том числе шаблоны в теге script.[16][17]
Двустороннее связывание данных
Двустороннее связывание данных в AngularJS является наиболее примечательной особенностью и уменьшает количество кода, освобождая сервер от работы с шаблонами. Вместо этого, шаблоны отображаются как обычный HTML, наполненный данными, содержащимися в области видимости, определённой в модели. Сервис $scope
в Angular следит за изменениями в модели и изменяет раздел HTML-выражения в представлении через контроллер. Кроме того, любые изменения в представлении отражаются в модели. Это позволяет обойти необходимость манипулирования DOM и облегчает инициализацию и прототипирование веб-приложений[18].
Плагин для Chrome
В июле 2012 года команда Angular выпустила плагин для браузера Google Chrome под названием Batarang[19], который облегчает отладку веб-приложений, построенных на Angular. Расширение позволяет легко обнаруживать узкие места и предлагает графический интерфейс для отладки приложений[20].
Версии
![]() | Информация в этом разделе устарела. |
В марте 2014 было объявлено о начале разработки AngularJS 2.0[21] и 15 сентября 2016 года объявлено[22] о выпуске финальной версии под названием Angular 2.
Последняя стабильная на данный момент версия AngularJS — 1.7.2, выпущенная в июне 2018 года[23].
Сравнение с Backbone.js
Похожими возможностями обладает Backbone.js — JavaScript-библиотека, основанная на шаблоне проектирования Model-View-Presenter (MVP), предназначена для разработки веб-приложений с поддержкой RESTful JSON интерфейса. Backbone — очень лёгкая библиотека (упакованная и gzip-сжатая по величине ~6.3 Кб), но для работы необходима библиотека Underscore.js, а для поддержки REST API и работы с DOM элементами рекомендуется подключить jQuery-подобную библиотеку: jQuery или Zepto. Backbone.js создан Джереми Ашкенасом, который известен также как создатель CoffeeScript.
Однако, есть и существенные различия:
- Связывание данных
- Наиболее характерной особенностью, которая разделяет библиотеки, является способ синхронизации модели и представления. В то время как AngularJS поддерживает двустороннее связывание данных, Backbone.js, чтобы связать модель и представление, в значительной мере опирается на шаблонный код[24].
- REST
- Backbone.js хорошо поддерживает RESTful-бэкэнд. В AngularJS также очень легко работать с RESTful API при помощи сервиса $resource. В то же время в AngularJS есть более гибкий сервис $http, который подключается к удаленным серверам с помощью браузерного объекта XMLHttpRequest или через JSONP[25].
- Шаблоны
- В качестве шаблона AngularJS использует комбинацию настраиваемых HTML-тегов и выражений[26]. Backbone.js использует различные шаблонизаторы, такие как Underscore.js[24].
См. также
Примечания
- ↑ The angularjs Open Source Project on Open Hub: Languages Page — 2006.
- ↑ angular.js/LICENSE at master · angular/angular.js · GitHub
- ↑ The angularjs Open Source Project on Open Hub: Licenses Page — 2006.
- ↑ Single Page Application using AngularJs. Tutorial
- ↑ Understanding Components
- ↑ What Is Angular? Дата обращения: 12 февраля 2013. Архивировано 20 мая 2013 года.
- ↑ Unit Testing
- ↑ E2E Testing
- ↑ Пишем простую директиву
- ↑ ngApp
- ↑ Data Binding
- ↑ https://docs.angularjs.org/api/ng/directive/ngController
- ↑ ngRepeat — directive in module ng
- ↑ Component Router
- ↑ ngIf Angular docs
- ↑ Учебник AngularJS: всеобъемлющее руководство. Часть 2. (Настраиваемые директивы).
- ↑ Шаблоны в директивах
- ↑ 5 Awesome AngularJS Features . Дата обращения: 13 февраля 2013. Архивировано 20 мая 2013 года.
- ↑ Batarang homepage
- ↑ AngularJS: Introducing the AngularJS Batarang
- ↑ AngularJS 2.0
- ↑ Angular, version 2: proprioception-reinforcement . angularjs.blogspot.ru. Дата обращения: 13 октября 2016.
- ↑ Перечень всех версий AngularJS и выпущенных в них изменений (англ.)
- ↑ 1 2 Backbonejs vs Angularjs: Demystifying the myths . Дата обращения: 13 февраля 2013. Архивировано из оригинала 20 мая 2013 года.
- ↑ Javascript Frameworks And Data Binding . Дата обращения: 13 февраля 2013. Архивировано из оригинала 20 мая 2013 года.
- ↑ script directive in module ng
Литература
- Brad Green, Shyam Seshadri. AngularJS. — O'Reilly Media, 2013. — 196 p. — ISBN 978-1449344856.
- Lukas Ruebbelke with Brian Ford. AngularJS in Action. — Manning Publications, 2015. — ISBN 9781617291333.
Ссылки
- angularjs.org — официальный сайт AngularJS
- angular.io — официальный сайт AngularJS
- Сайт на русском
- Angularjs at Google Groups
- Angular.JS Team
- AngularJS at Google+
- Batarang Chrome plugin
- Сборник видео-уроков
- Руководство по AngularJS (рус)