🦊 Angular Fox 🚀 — русскогорящие новости сообщества
3.97K subscribers
1.2K photos
7 videos
1.06K links
Как костыль на реактивно-лисьей тяге 🔥🦊

Нравится канал? Подпишись на меня!
👉 twitter.com/thekiba_ru
💖 twitter.com/thekiba_io
medium.com/@thekiba
github.com/thekiba

Чаты @angular_ru @angular_jobs
Download Telegram
🚀 Prettier — инструмент для форматирования кода. Имеет минималистичный конфиг, есть интеграция со всеми IDE и поддерживает множество языков:

JavaScript · TypeScript · Flow · JSX · JSON
CSS · SCSS · Less
HTML · Vue · Angular
GraphQL · Markdown · YAML

🎁 https://prettier.io/

__
🌟 Для простой установки в Angular, есть готовый schematics:

npm i -g @schuchard/prettier
ng g @schuchard/prettier:add


👌 https://github.com/schuchard/prettier-schematic
Магическое отображение ошибок Angular Forms

Netanel Basal рассказывает о том, как можно использовать директивы для более простого отображения ошибок в Angular.

👉 https://netbasal.com/make-your-angular-forms-error-messages-magically-appear-1e32350b7fa5
Если вы думаете, как уменьшить затраты на разработку и поддержание реактивных форм в Angular, то обязательно попробуйте NgxFormly.

🎁 NgxFormly — простой инструмент для создания и динамического отображения реактивных форм.

👉 https://github.com/ngx-formly/ngx-formly

__
Дополнительно рекомендую ознакомиться с несколькими статьями по этой теме:

Организация приложения с использованием NgxFormly
https://hackernoon.com/organize-your-forms-application-using-ngx-fomrly-796150461045

Обработка ошибок с Angular и NgxFormly
https://itnext.io/error-handling-with-angular-6-and-ngx-formly-8272a3aa7871
👍1
🚀 Для обеспечения быстрого поиска провайдеров, Angular под капотом использует Bloom Filters.

👌 Есть замечательная статья, которая подробно объясняет эту структуру данных:
https://llimllib.github.io/bloomfilter-tutorial/
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Встречайте! 🚀 Launchpad для RxJS 🎊

🧩 Исследуйте категории
🔎 Ищите операторы
📚 Изучайте их

https://reactive.how/rxjs/
Лучшее из мира Angular за неделю
Дайджест №1 (18 января — 25 января)

Свежая подборка со ссылками на новости и материалы.
Приятного чтения!


https://medium.com/ngx/angular-digest-1-4a996fa78e3c
🚀 NGXF - Non-State Management for Angular

Если еще не видели, то обязательно посмотрите этот репозиторий. В нем вы найдете множество нестандартных идей использования Angular DIrective, в частности:
Http, Socket.IO, Cookies, Ivy Hooks и многие другие.

👌 Как пример, использование Lazy Components с помощью директивы:
<ng-container *lazy="'lazy.module#LazyModule'"></ng-container>


👉 Подробности в репозитории и документации:
https://github.com/ngxf/platform
https://ngxf.gitbook.io/platform/
Alex 🦅 EagleABC: Angular, Bazel and CLI

На AngularNYC рассказали про производительность 🥬 Bazel, и планы по улучшениям. Релиз обещают в Июле.

👉 https://www.youtube.com/watch?v=fEUgZopCK8E
This media is not supported in your browser
VIEW IN TELEGRAM
Вопрос: Какой WYSIWYG Editor выбрать?
Ответ: Рекомендую посмотреть на MediumEditor.

✍️ MediumEditor — очень простой WYSIWYG Editor:
🚆 Не имеет зависимотей
🕊️ Легковестный
👷 Работает во всех браузерах

👉 https://github.com/yabwe/medium-editor

__
Так же есть множество плагинов для Картинок, Таблиц, Markdown и другого.
📚 Изучение Open Source: то, как Angular обрабатывает выражение 'foo + bar | baz'.

Front-end of a compiler
Recursive descent parsing
Visitor pattern

👉 Все это в трех TypeScript файлах
https://github.com/angular/angular/tree/master/packages/compiler/src/expression_parser
📚 Если вам понравилась прошлая статья про Bloom Filter, то обязательно почитайте о том:

🚀 Как реализован DI в Angular Ivy
🦄 И что такое NodeInjector

👉 https://blog.angularindepth.com/angular-di-getting-to-know-the-ivy-nodeinjector-33b815642a8e
📚 Для того, чтобы больше не теряться с Injector, Providers и InjectFlags в Angular, рекомендую две замечательные статьи.

🔥 Tree-shakable зависимости в Angular
https://blog.angularindepth.com/tree-shakable-dependencies-in-angular-projects-5aaa7012b9e7

🦄 Область видимости провайдеров в Angular
https://blog.angularindepth.com/a-curios-case-of-the-host-decorator-and-element-injectors-in-angular-582562abcf0a

__
Если только недавно начали знакомство с Angular, то лучше начать с официальных статей в документации:
https://angular.io/guide/dependency-injection
🦄 Virtual DOM для Angular

Очень ранняя версия, но уже можно попробовать:
@Component({ template: '' })
export class AppComponent extends Renderable {
render() {
return (<h1>Hello World!</h1>)
}
}


👉 https://github.com/trotyl/ng-vdom

___
Также если интересно как это работает, то есть замечательная статья:
https://blog.angularindepth.com/introducing-to-ng-vdom-a-new-way-to-write-angular-application-60a3be805e59
This media is not supported in your browser
VIEW IN TELEGRAM
🦄 Storybook

Если еще не пробовали Storybook, то обязательно попробуйте. Он позволит быстро структурировать отображение компонентов вашей библиотеки или приложения.

Для быстрого старта есть готовый schematics:
cd my-react-vue-angular-app
npx -p @storybook/cli sb init


👉 https://storybook.js.org/

__
Также, если не видели, то посмотрите доклад Алексея Охрименко про Storybook:
https://youtu.be/HkVcU24Opu0
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Вместе с обновлением RxJS (6.4.0) так же обновили документацию.

👏 Все примеры доступны на stackblitz
🔎 Добавили форму поиска оператора
This media is not supported in your browser
VIEW IN TELEGRAM
📚 Вы знали, что TypeScript оптимизирует использование enum, если добавить const?
👍1
📚 Вопрос: что такое share(), publish(), multicast() в RxJS?
🦊 Заваривайте кофейку, ответ будет длинным. Прежде чем переходить к следующему пункту обязательно разберитесь с предыдущим.


📢 Что такое Subject?
Простыми словами, Subject это телефон. В него можно говорить, и из него можно слушать одновременно.

Есть различные Subject: Subject, ReplaySubject, BehaviorSubject, AsyncSubject.


🏰 Что такое multicast()?
Оператор multicast() на вход принимает Subject или его фабрику. И передавая в него различные виды Subject можно получить следующие комбинации:
multicast(new Subject())
multicast(new ReplaySubject())
multicast(new BehaviorSubject())


Все это создает нам ConnectableObservable, который позволяет расшарить Subject на несколько потоков. Но у них всех будут разные стратегии работы, в зависимости от переданного Subject.


🍬 Немного сахара
Операторы publish(), publishReplay(), publishBehavior() используют mulicast() с определенным Subject:
publish()
// работает аналогично multicast(new Subject())

publishReplay()
// работает аналогично multicast(new ReplaySubject())

publishBehavior()
// работает аналонично multicast(new BehaviorSubject())



👨‍🏫 Считаем ссылки
Оператор refCount() реализует паттерн RefCount и автоматически управляет ConnectableObservable:
— если появляется подписчик, то он делает connect;
— если появляется еще один подписчик, то ничего не происходит, используется тот же connect;
— если все подписчики отпишутся, то он сделат unsubscribe от коннекта к ConnectableObservable.


🦄 Финальный босс
Остались операторы share(), shareReplay().
share()
// работает аналонично publish() + refCount()

shareReplay({ refCount: true })
// работает аналонично publishReplay() + refCount()


❤️ Теперь ты знаешь как это работает, отправь своим коллегам, пусть они тоже узнают.
🦄 Если часто просматриваете код на GitHub, то попробуйте Sourcegraph для TypeScript:
👮 Type information
👉 Go to definition
🔎 Find references

🎁 Sourcegraph: Google Chrome Extention
https://chrome.google.com/webstore/detail/sourcegraph/dgjhfomjieaadpoljlnidmbgkdffpack?hl=en
📚 Совет дня: если не получается реализовать сложную задачу, попробуйте ее скомпилировать.

👌 Visitor Pattern
https://refactoring.guru/ru/design-patterns/visitor
📚 Адаптация Clean Code для TypeScript

Особое внимание советую уделить:
🏹 Functions
🎓 Classes
🎨 Composition
🚪 Open/Closed Principle

👉 https://github.com/labs42io/clean-code-typescript