10 порад для Angular від спільноти

4 хв. читання

Протягом червня автор цього матеріалу разом з Waterplea щодня публікували корисні рекомендації для Angular-розробників. Спільнота активно відреагувала на такий челендж, тому публікуємо найпопулярніші поради за версією ком'юніті.

Створюйте токени для глобальних об'єктів

Найбільш популярна рекомендація стосувалась DI-токенів та глобальних об'єктів.

Фронтенд розробники звикли мати справу з глобальними об'єктами, доступними в будь-якій зоні видимості. Це всім відомі window, document, location, метод fetch тощо. Ми знаємо, що можемо звернутись до них будь-де.

Але ми забуваємо про середовища без браузера. Наприклад, в середовищах тестування Universal або Jest для Angular немає window чи DOM. Якщо у вас є токени для таких глобальних об'єктів, ви легко можете замінити їх для іншого середовища — і без проблем виконувати код.

Токенізуйте глобальні об'єкти та використовуйте їх з механізмом впровадження залежностей (пер. dependency injection). Сутності у вашому коді стануть більш абстрактними, їх буде простіше протестувати та замінити.

Базові токени для ваших застосунків за посиланням.

Якщо ви хотіли б поглибити власні знання про механізм впровадження залежностей в Angular, можете ознайомитись з матеріалом за посиланням.

Розширюйте Observable чи Subject

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

Ви можете спростити такий підхід, наслідуючи класи Observable або Subject:

Не забувайте, що сервіси Angular можуть наслідувати Observable. Адже це просто клас. Більше деталей про використання такого механізму в Web API для Angular за посиланням. У фрагменті коду вище наведена реалізація сервісу геолокації.

Контролюйте значення як ReplaySubject

Бувають ситуації, коли необхідно підписатися на оновлення valueChanges та контролювати це значення. Тут не потрібно винаходити велосипед — просто використайте таку обгортку:

Ви можете перетворити valueChanges у ReplaySubject за допомогою обгортки.

Зробіть ваш застосунок адаптивним для екранів з високим значенням DPI

Ви знаєте, що можна відстежити, чи екрани ваших користувачів мають високе значення DPI? Така інформація потрібна, щоб покращувати інтерфейс застосунку. А зробити це можна за допомогою нативних медіатегів:

Створіть структурну директиву в Angular для контролю контенту на екранах з високим DPI. Вона особливо зручна для відео або картинок.

Не забувайте про пайпи

Пайпи (канали або pipes) — дуже потужний декларативний інструмент для обробки значень всередині шаблона компонента. Не бійтесь створювати власні пайпи, адже з ними ви зможете зробити майже будь-які перетворення даних.

Приклад універсального пайпа:

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

Banana in a box

Надзвичайно корисний та зручний механізм в Angular, насамперед при роботі з ngModel. Як реалізувати його у власному компоненті?

Чи знаєте ви, як використати синтаксис «banana in the box» у вашому Angular-компоненті? Просто додайте Change в кінці output-змінної.

RxJS — незвіданий світ

Намагайтеся перевіряти всі параметри операторів RxJS, коли використовуєте їх. Існує багато можливостей зробити ваші потоки швидшими та більш потужними.

Не всі оператори популярні, але часто саме невідомі оператори можуть розв'язати вашу задачу одним рядком.

Для автора був знахідкою ось цей оператор:

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

Ще один популярний твіт про RxJS. Невеликий трюк, щоб зробити ваші компоненти більш розширюваними.

Гарною практикою вважається робити приватними суб'єкти у публічних API, а також давати доступ користувачам класу до observable. Ви можете використовувати .pipe() замість .asObservable(). На виході отримаєте той самий результат, однак реалізацію з .pipe() простіше розширювати в майбутньому.

І ще трохи про RxJS: оператор, який допоможе створити невеликий .pipe() з надзвичайно потужним функціоналом.

Чи чули ви щось про оператор defaultEmpty? Він повертає автоматичне значення, якщо джерело потоку не повернуло жодного значення.

Користувацький ngFor

В Angular є спеціальний синтаксис для директив, подібних до for … of …. З ним ви можете створити ngFor для власних потреб.

Це може бути, наприклад, ngFor для ітерування словником. Або простий for для ітерації числами.

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

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація