7 причин, почему AngularJS крут

в 7:02, , рубрики: AngularJS, javascript, переводы, Песочница, метки: ,

Достаточно вольный перевод заметки 7 reasons why angularJS rocks.

AngularJS
Я backend-разработчик и мир Javascript фреймворков для меня достаточно нов, хотя в последние полгода мой интерес к ним сильно растет. Причина проста: я считаю, что стек технологий REST + JSON + Rich JS все больше подходит для широкого круга веб-приложений. Такой подход помогает победить дерьмовую сомнительную концепцию MVC в серверных приложениях. Почему MVC можно считать вредным — это отдельная история, сейчас лучше поговорим об AngularJS.

Что в AngularJS особенного?

Dependency injection в стандартной поставке

Что дает вам более “чистые” интерфейсы, прозрачные зависимости и держит вашу архитектуру в хорошей форме.

Возможности модульного тестирования в стандартной поставке

И это не просто бросание слов на ветер, т.к. Miško Hevery является одним из ключевых разработчиков, который известен (по крайней мере, мне) своей пропагандой тестирования.

e2e тесты позволяют легко мокать запросы

Ваши тесты не зависят от сервисов на стороне сервера. Вы можете полностью изолировать свои тесты:

$httpBackend.whenGET("http://api.example.com/data").respond({'data': 123});
Декларативность

Вы по максимуму используете HTML атрибуты, сохраняя тем самым сотни строчек javascript кода.

Отличное open source сообщество

Практически мгновенные (обычно пара часов) ответы в списке рассылки. Быстрые решения по pull request-ам. Ключевые разработчики открыты для обсуждений.

Дружелюбность к REST

AngularJS действительно дружелюбен к REST. Вот так вы можете получить список коммитов репозитория на Github:

var commits = $resource('https://api.github.com/repos/:user/:project/commits').get({user: 'mkotsur', project: 'gitoscop'})
Scopes, bindings и watches

У вас есть scope-ы, изменения которых отслеживаются и модели которых могут быть привязаны к HTML элементам. Все обновления работают автомагически с помощью $scope.$watch.

Для того чтобы глубже познакомиться с Angular, я создал «игрушечное» приложение, которое использует API Github для представления интерфейса работы с последними коммитами и diff-ами выбранного репозитория. Демо: http://mkotsur.github.com/gitoscop, код: https://github.com/mkotsur/gitoscop.

Конец перевода.

Небольшое добавление для джангистов:

  • конфликт template тегов — stackoverflow.com/questions/8302928/angularjs-with-django-conflicting-template-tags. Верхний ответ — для 0.9.x, второй ответ для 1.0.x.
  • для csrf я сейчас использую что-то типа этого:
            var module = angular.module('Cabinet', [], function ($interpolateProvider) {
                $interpolateProvider.startSymbol('[[');
                $interpolateProvider.endSymbol(']]');
            }).
            config(function($httpProvider){
                $httpProvider.defaults.headers.common['X-CSRFToken'] = '{{ csrf_token }}';
            });
    

Несколько интересных ссылок:

Автор: aav

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js