[Перевод] Подробно о внутренней кухне AngularJS

У фреймворка AngularJS есть несколько интересных решений в коде. Сегодня мы рассмотрим два из них — как работают области видимости и директивы.Первое, чему обучают всех в AngularJS — директивы должны взаимодействовать с DOM. А больше всего новичка запутывает процесс взаимодействия между областями видимости, директивами и контроллерами. В этой статье мы рассмотрим подробности работы областей видимости и жизненный цикл Angular-приложения.

Если в следующей картинке вам что-то непонятно — эта статья для вас.

image

(В статье рассматривается AngularJS 1.3.0)AngularJS использует области видимости, чтобы абстрагировать общение директив и DOM. Области видимости есть и на уровне контроллеров. Области видимости — это простые объекты JavaScript (plain old JavaScript objects, POJO). Они добавляют кучку «внутренних» свойств, которые предваряются одним или двумя символами $. Те, у которых стоит префикс $$, не нужно использовать в коде слишком часто — обычно их использование говорит о непонимании работы приложения.

Так что это за области видимости такие? На жаргоне AngularJS область видимости означает не то, что под этим подразумевается в коде JS. Обычно под областью видимости понимают блок кода, которая содержит контекст, разные переменные и т.п. К примеру: function eat (thing) { console.log ('Кушаю ' + thing); }

function nuts (peanut) { var hazelnut = 'hazelnut'; // фундук

function seeds () { var almond = 'almond'; // миндаль eat (hazelnut); // Отсюда я могу залезть в мешок! }

// Миндаль здесь недоступен. } Однако это не те области видимости, про которые идёт речь в AngularJS.

Наследование областей видимости в AngularJS Область видимости в AngularJS также является контекстом, но только в понимании AngularJS. В AngularJS область видимости связана с элементом и всеми его дочерними элементами, при этом элемент не обязательно прямо связан с областью видимости. Элементам назначаются области видимости одним из трёх способов.Первый — если область видимости создаётся у элемента контроллером или директивой.