З великою силою приходить і велика відповідальність

приходить

Безперечно, ангуляр дає вам силу. Але користуватися нею треба з розумом. Я постарався сформулювати три прості правила, які я багато разів порушував і страждав від цього.

1. Робіть копію об'єкта, якщо він може зазнати небажаних змін.

В ангулярі дані за замовчуванням є єдиними, і якщо ви зміните їх навмисно, випадково або внаслідок помилки, під загрозою опиняться всі місця його використання. Наприклад, у нас є фабрика порожніх сутностей, які будуть використані для заповнення форм.

І далі, в контролері форми ми створюємо в $scope цей порожній об'єкт і використовуємо його як модель форми.

Що буде, якщо при введенні форми ця модель зміниться, а потім викликати mapper.createEmptyPetition() знову для іншої форми? Оскільки скрізь використовується той самий екземпляр об'єкта emptyObject, зміни будуть відображені в ньому, і при наступному виклику mapper.createEmptyPetition() ми отримаємо брудний і використаний об'єкт. Подібних моментів при розробці може виникати безліч, і потрібно обережно ставитись до роздачі посилань на об'єкти праворуч і ліворуч. В даному випадку слід було б зробити ось так — повертати копію об'єкта, щоб її зміни не стосувалися оригінального об'єкта:

2. Не втрачайте посилання на об'єкт/масив, якщо не хочете втратити синхронізацію даних

Простий приклад. У нас є контролер, у $scope якого лежить масив, і є функція для очищення масиву:

І десь у юшці ви віддаєте масив у якусь директиву, наприклад, яка його відмалює.

3. Будьте уважні з дочірніми $scope

Натомість, потрібно мати для таких справ спеціальний об'єкт у $scope, назвемо йогоviewModel

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»