AngularJS and Firebase applications

Ang_fire

 Tuts+ Tutorials

 

Firebase library for AngularJS: AngularFire

 

 

Реклама

Правильное использование promise в angularJS

В процессе использования angular.js трудно обойтись без объекта $q (он же promise/deferred), ведь он лежит в основе всего фреймворка. Deferred механизм является очень простым и мощным инструментом, который позволяет писать лаконичный код. Но чтобы по-настоящему использовать эту мощь, необходимо знать обо всех возможностях данного инструмента.
Вот несколько моментов, о которых вы возможно не знали.

Continue reading «Правильное использование promise в angularJS»

Promise-ы в AngularJS

Одной из ключевых составляющих практически любого веб-приложения является взаимодействие с сервером. В больших приложениях это далеко не один запрос. При этом запросы часто необходимо объединять для последовательного или параллельного выполнения, а часто сочетать и то и другое. Кроме того, большие приложения обычно имеют многослойную архитектуру — обертка над RESTFul API => бизнес-сущности => более комплексная бизнес-логика (разбиение условно для примера). И на каждом слое необходимо принять данные в одном формате и передать на следующий слой уже в другом.

Вот со всеми этими задачами могут помочь справиться Promise-ы.

За подробностями добро пожаловать под кат.

Continue reading «Promise-ы в AngularJS»

Понимание типов сервисов в AngularJS

Ангуляр поставляется с различными видами служб или сервисов, каждый из которых применяется в своей ситуации.
Имейте в виду, что сервисы, не зависимо от типа, это всегда синглтоны (одиночки).

Примечание: Синглтон это шаблон проектирования, который ограничивает класс таким образом, что у него может быть только один экземпляр. Именно с этим экземпляром и ведется работа везде, где он используется.

Перейдем к типам сервисов
Continue reading «Понимание типов сервисов в AngularJS»

AngularJS — Directives

AngularJS директивы – это клево

AngularJS является каркасом (фреймворком) для построения web приложений, который позволяет создавать сложные приложения достаточно просто. Одна из его лучших возможностей, это создание директив, которые являются повторно используемыми web компонентами. Это дает возможность создавать новые HTML теги и атрибуты, которые могут динамично отображать контент в ответ на изменение данных, и обновлять сами данные, в случае необходимости.
Это очень высокопроизводительный подход, поскольку он позволяет вам оборачивать сложное взаимодействие с DOM в повторно используемые пакеты кода.

Continue reading «AngularJS — Directives»

Паттерны проектирования в JS

В условиях когда клиентская часть веб-приложений становится все более толстой, бизнес-логика неумолимо переползает на клиент, а на суверенитет серверных технологий все более смело посягает node.js нельзя не задуматься о приемах проектирования архитектуры на javaScript. И в этом деле нам несомненно должны помочь паттерны проектирования — шаблонные приемы решения часто встречающихся задач. Паттерны помогают построить архитектуру, которая потребует от вас наименьших усилий при необходимости внести изменения. Но не стоит воспринимать их как панацею, т.е., грубо говоря, если качество кода «не фонтан», он кишит хардкодом и жесткой связью между логически независимыми модулями, то никакие паттерны его не спасут. Но если стоит задача спроектировать масштабируемую архитектуру, то паттерны могут стать хорошим подспорьем.
Но впрочем эта статья не о паттернах проектирования как таковых, а о их применении в javaScript. В первой части этой статьи я напишу о применении порождающих паттернах. Continue reading «Паттерны проектирования в JS»

Каррирование в JS

Каррирование — это приём в функциональном программировании, позволяющий преобразовать функцию, заменив её несколько первых аргументов константными значениями, тем самым создав новую функцию с меньшим количеством аргументов на основе старой. Этот будет удобно применять в случае, когда первые несколько аргументов функции заранее известны, и указывать их при каждом вызове нет необходимости.

Вот небольшой пример использования его на практике:

(function(){
	Function.prototype.partial = function(){
		var fn = this, args = Array.prototype.slice.call(arguments);

		return function(){
			var arg = 0;
			for (var i = 0; i < args.length && arg < arguments.length; i++) {
				if(args[i] === undefined)
					args[i] = arguments[arg++];
			}
			console.log(args);
			return fn.apply(this, args);
		};
	}

	var func = setTimeout.partial(undefined, 1000);
	func(function(){
		console.log('After 1 second');
	});

	var bindClick = document.body.addEventListener.partial('click', undefined, false);

	bindClick(function(){
		console.log('Click!');
	});
})();

Приватные переменные в JS

Замыкания чаще всего применяются для инкапсуляции некоторой информации в виде определенного рода частных переменных — иными словами, для ограничения области видимости подобных переменных. Объектно-ориентировнный код, написаный на JavaScript, не может иметь традиционные приватные свойства, но используя замыкания мы можем все-таки добиться похожего и вполне приемлимого результата:

var doTest = function doTest(val, desc){		
	var status = !!val ? 'Passed' : 'Failed';
	console.log(status + ': ' + desc, val );
};
// Private variables with closures
function Ninja(){
	var feints = 0;
	
	this.getFeints = function(){
		return feints;
	};

	this.feint = function(){
		feints++;
	};
}

var ninja = new Ninja();

ninja.feint();
doTest(ninja.getFeints() == 1, 'We are acces to the internal feint count.');
doTest(ninja.feints, 'And the Private data is inaccessible to us.')

Как показывают тесты, с помощью метода доступа мы можем получить значение переменной, но не прямой доступ к ней.

Замыкания в JS

Замыкания являются определяющим языковым средством JavaScript, тесно связанным с функциями.

Коротко говоря, замыкание — это область действия, которая создается при объявлении функции и позволяет ей получить доступ и манипулировать внешними по отношению к ней переменными. Иными словами замыкания предоставляют функции доступ ко всем переменным и другим функциям, которые находятся в области действия при объявлении самой функции.

Continue reading «Замыкания в JS»

Особенности работы функций в JavaScript

  • Написание сложного кода опираеться на изучение JavaScript как языка функционального программирования
  • Функции в JS являются объектами высшего порядка. Функции можно создавать с помощью литералов, присваивать переменным или свойствам, передавать в качестве параметров, возвращать в качестве результата выполнения других функций, наделять свойствами и методами
  • У каждого объекта есть свои особенности, у функций — это возможность быть вызваными
  • Функции создаються с помощью литералов с необязательным указанием имени
  • Область действия переменных в функции простирается от места объявления и до конца функции, пересекая границы кодовых блоков
  • Внутренние именованые функции доступны повсюду в охватывающей внешней функции, даже по ссылкам с упреждением (в этом случае действет подъемный механизм)
  • Список параметров функции может отличаться по длине от фактического списка её аргументов. В частности: параметры, которым не присвоены значения, вычисляются как имеющие значения — undefined; лишние аргументы просто не привязываются к именам параметров
  • При каждом вызове функции ей передаются два неявных параметра: arguments — коллекция фактически переданных аргументов; this — ссылка на объект, служащий в качестве контекста функции
  • Функции можно вызывать разными способами, а механизм их вызова определяет значение контекста функции. В частности, при вызове функции:
    • в виде обычной функции ее контекстом становиться глобальный объект — window
    • в виде мтода контекстом функции становится объект, владеющий этим методом
    • в виде конструктора контекстом функции становится вновь созданный объект, размещенный в оперативной памяти
    • с помощью методов apply() и call(), контекстом может стать любой избранный объект