Встроенные сервисы 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 и внедрение зависимостей

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

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

Continue reading

setTimeout может содержать больше 2х параметров

Никогда не задумывался на тем, что есть альтернативный синтаксис использования метода setTimeout:

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);

param1, param2 – параметры, которые передадутся в функцию func, пример:

setTimeout(alert, 5000, "YES")

только в IE версии < 10 это не поддерживается. Но можно переопределить метод, как предложено тут.

 

P.S.: Сергей, спасибо за тему.

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

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

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

Continue reading

Паттерны в JavaScript

Решил сделать разбор направления шаблонов проектирования и осветить тему качественными примерами.

Под раздачу падают следующие кандидаты:

  • Singleton
  • Constructor
  • Module
  • Mixin
  • Observer
  • Factory method
  • Abstract Factory
  • Facade
  • Decorator
  • Proxy
  • Adapter
  • MVC/MVP/MVVM

Литература:

Если какие-то важные шаблоны забыл, либо есть чего добавить по литературе – пишите – дополним.