controller
Функція / об'єкт являє собою абстракцію модель-уявлення-контролер (MVC). Хоча нічого не можна писати про MVC, це все-таки є найважливішим перевагою кутового: розділити питання на більш дрібні шматки. І це все, нічого більше, тому якщо вам потрібно реагувати на Model
зміни, що виникають з View
боку, Controller
- це правильна людина, яка виконує цю роботу.
Історія про link
функцію різна, вона йде з іншого погляду, ніж MVC. І це дуже важливо, як тільки ми хочемо перетнути межі controller/model/view
(шаблону) .
Почнемо з початку параметри, передані у link
функцію:
function link(scope, element, attrs) {
- Об'єм - це кутовий об'єкт.
- елемент - обернутий jqLite елемент, який відповідає цій директиві.
- attrs - об’єкт з нормалізованими іменами атрибутів та відповідними їм значеннями.
Щоб поставити це link
в контекст, слід зазначити, що всі директиви проходять цей етап процесу ініціалізації: « Компілювати» , « Посилання» . Виписка з книги Бреда Гріна та Шиям Сешадрі Angular JS :
Фаза компіляції (сестра посилання, згадаймо її тут, щоб отримати чітке уявлення):
У цій фазі Angular йде по DOM, щоб визначити всі зареєстровані директиви в шаблоні. Потім для кожної директиви вона перетворює DOM на основі правил директиви (шаблон, заміна, трансклудація тощо) та викликає функцію компіляції, якщо вона існує. Результатом є компільована функція шаблону,
Фаза зв'язку :
Щоб зробити перегляд динамічним, Angular потім виконує функцію посилання для кожної директиви. Функції зв'язку зазвичай створюють слухачів у DOM або моделі. Ці слухачі постійно підтримують перегляд та модель синхронізуються.
Гарний приклад того, як користуватися, link
можна знайти тут: Створення користувацьких директив . Дивіться приклад: Створення директиви, яка маніпулює DOM , яка вставляє "дата-час" на сторінку, оновлюється щосекунди.
Лише дуже короткий фрагмент із цього багатого джерела, який показує справжню маніпуляцію з DOM. Існує підключена функція до $ timeout-сервісу, а також вона очищається в її виклику деструктора, щоб уникнути витоку пам'яті
.directive('myCurrentTime', function($timeout, dateFilter) {
function link(scope, element, attrs) {
...
// the not MVC job must be done
function updateTime() {
element.text(dateFilter(new Date(), format)); // here we are manipulating the DOM
}
function scheduleUpdate() {
// save the timeoutId for canceling
timeoutId = $timeout(function() {
updateTime(); // update DOM
scheduleUpdate(); // schedule the next update
}, 1000);
}
element.on('$destroy', function() {
$timeout.cancel(timeoutId);
});
...
$watch
,$digest
і$apply
. »?