AngularJS: Использование контроллера директивы в другой директиве

Опция require в описании директивы дает нам возможность использовать контроллер другой директивы. Мы также можем указать массив контроллеров.

Объяснение можно посмотреть на egghead.io, код можно взять тут.

Важно: если поставить в начале значения символ ‘^’,  то интерпретатор будет пытаться найти контроллер директивы в родительских элементах. Если не поставить – только на текущем елементе(как это было в примере на egghead.io).

ngDirective – директива для загрузки директив

Суть:

директива типа “атрибут”, значением идет имя поддирективы, которую необходимо динамически подгрузить. Может быть удобно в случае, когда в зависиомти от условия мы должны выводить различные компоненты.

Continue reading

AngularJS: подружить $httpBackend моки с шаблонами

Если необходимо использовать одновременно mock-сервис $httpBackend(из ngMock или ngMockE2E) и загрузку шаблонов из файлов(которая идет через незамоканы $httpBackend сервис), получаем конфликт с выдачей следующей ошибки:

Error: Unexpected request: GET views/main.html

Которая говорит о том, что наш мок не знает ничего о шаблонах.

Возможны 2 варианта решения:

  1. отказаться вообще от загрузки html файлов (гуглить в тему кеширования шаблонов и html2js) – это позволит не использовать $httpBackend сервис вообще
  2. сделать заглушку на заглушку: дать инструкции мок сервису пропускать запросы на шаблоны. Делается это так: $httpBackend.whenGET(/^tepmlates\//).passThrough();

Continue reading

Встроенные сервисы AngularJS

Встроенные сервисы или сервисы основного модуля(ng) AngulartJS.

$window – ссылка на глобальный объект window
$document – jQuery обертка элемента window.document
$location – синхронизация URL с адресной строкой браузера
$timeout(fn[, delay][, invokeApply]) – обертка для метода window.setTimeout
$sniffer, $browser – “приватные” сервисы для внутреннего использования
$q – сервис работы с асинхронными операциями (promise/deferred)
$rootScope – сервис получения доступа к root scope
$http(config) – сервис взаимодействия по протоколу HTTP (XMLHttpRequest/JSONP)
$httpBackend – низкоуровневый аналог $http (может быть использован в тестах)
$route– сервис роутинга – связывания URL и контроллеров приложения
$routeParams – сервис доступа к параметрам из URL
$cacheFactory(cacheId[, options]) – создания и получения доступа к кэш-хранилищам
$templateCache – сервис кеширования шаблонов
$controller(constructor, locals) – вызов контроллера
$anchorScroll – автоматический скрол к конкретному элементу(до сих пор думаю зачем это было вынесено в сервис)
$filter(name) – создание фильтров используемых во вью
$parse(expression) – конвертирует Ангулар-выражение(expression) в функцию
$interpolate(text[, mustHaveExpression]) – обрабатывает текст содержащий выражения(для этого использует $parse)
$compile(element, transclude, maxPriority) – копилирует шаблон, обрабатывает директивы, связывает события. Использует $interpolate
$exceptionHandler(exception[, cause]) – сервис эксепшенов
$log – логирование

AngularJS: $scope.$unwatch и $scope.$off

По непонятной причине в фреймворке не реализованы ни метод $unwatch(), ни метод $off() для снятия прослушивания объекта($watch())/события($on()).

А для случая, когда нам нужно сделать “unbind“, Angular предлагает (исходя из исходников) следующий способ:

var stopWatch = $scope.$watch('someObject', callback);
 stopWatch();

аналогично для $on:

 var stopListen = $scope.$on('someEvent', callback);
 stopListen();

Если необходимо выполнить обработчик только один раз(на подобие jQuery.one()), можно сделать так:

var stopWatch = $scope.$watch('someObject', function(){
 //some code here
 stopWatch();
});

Публичные свойства AngularJS

  • bootstrap(element[, modules]) – используется для старта фреймфорка вручную
  • injector(modules) – создает функцию-инжектор, которая может быть использована для получения сервисов
  • module(name[, requires], configFn) – метод регистрации модулей приложения
  • copy(source, destination) – полное копирование(deep copy) объекта
  • extend(dst, src[,src2[,src3…]]) – расширение объекта
  • equals(o1, o2) – сравнение значений/объектов
  • element(element) – ссылка на jqLite
  • forEach(obj, iterator[, context]) – организация цилка forEach
  • noop() – функция “пустышка”, которую можно использовать как заглушку для колбэков
  • identity(value) – создает функцию, которая вернет значение(используется как обертка для мест, где нужно передавать строго функцию)
  • bind(self, fn, args)карринг для функции fn
  • toJson/fromJson – конвертация в/из JSON
  • isUndefined, isDefined, isString, isFunction, isObject, isNumber, isElement, isArray, isDate – методы проверки принадлежности типу
  • version – версия продукта
  • lowercase/uppercase – перевод в нижний/верхний регистр
  • callbacks – объект-коллекция колбэков для JSONP

AngularJs Batarang

Если вы уже работаете с AngularJS, то наверняка заметили, что стандартные инструменты веб разработчика не предоставляют необходимую функциональность, иногда хочется чего-то более специализированного на конкретных особенностях фреймворка. И нам спешит на помощь расширение для ChromeAngular Batarang.

Инструмент еще достаточно сырой, сами авторы этого не скрывают: “We are releasing this early version because we’d love to get your feedback. Let us know what you think and what we should add or improve in the AngularJS Google Group.” Но все же уже можно начинать пробовать на вкус.

Итак что же нам дает использование Batarang’a?

Continue reading

Модули AngularJS и внедрение зависимостей

Как извесно Dependency Injection – это один из основных концептов архитектуры AngularJS. Разберем несколько примеров использования сервисов в модулях.

За основу данного поста я взял вот эту статью, которую перевел и немного поправил.

Continue reading

С чего начать изучение AngularJS. Часть2 – Шаблоны оживают.

В первой части мы разобрали как развернуть проект, его структуру, MVC компоненты и как это все тестировать с помощью testacular.

В этой части мы уделим больше внимания шаблонам и директивам.

Continue reading