Size: a a a

AngularPiter - русскоговорящее сообщество

2018 December 03

K

Katerina in AngularPiter - русскоговорящее сообщество
источник

K

Katerina in AngularPiter - русскоговорящее сообщество
Мне нравится тво стиль, Лис, все подробно и «для малышей», обожаю это
источник

Вキ

Вертихвост キバ in AngularPiter - русскоговорящее сообщество
Katerina
Мне нравится тво стиль, Лис, все подробно и «для малышей», обожаю это
источник

Вキ

Вертихвост キバ in AngularPiter - русскоговорящее сообщество
Посмотрел, отличный доклад!
Могу его в статью добавить? И есть ли аналоги на английском?
источник

K

Katerina in AngularPiter - русскоговорящее сообщество
Это же публичная запись, добавляй куда хочется)
источник

Вキ

Вертихвост キバ in AngularPiter - русскоговорящее сообщество
Продолжение серии статей по RxJS!

На этот раз поговорим о том, а надо ли вообще отписываться от Observable, почему это приходится сделать, и как перестать не только отписываться, но и подписываться!

🔥 Лисьи отписки 🦊
https://medium.com/thekiba/why-do-you-need-unsubscribe-ee0c62b5d21f
источник

АС

Александр Семенов in AngularPiter - русскоговорящее сообщество
Вертихвост キバ
Продолжение серии статей по RxJS!

На этот раз поговорим о том, а надо ли вообще отписываться от Observable, почему это приходится сделать, и как перестать не только отписываться, но и подписываться!

🔥 Лисьи отписки 🦊
https://medium.com/thekiba/why-do-you-need-unsubscribe-ee0c62b5d21f
Было бы интереснее про отписки именно в цепочках подписок...
источник

АС

Александр Семенов in AngularPiter - русскоговорящее сообщество
Например, диалоговое окно, возвращает результат и дальше в зависимости от этого результата по цепочке выполняем действия или на подобие таких примеров более приближенных к реальным
источник

АС

Александр Семенов in AngularPiter - русскоговорящее сообщество
Спасибо за статью)))
источник

АС

Александр Семенов in AngularPiter - русскоговорящее сообщество
Или например так же авторизация когда после ввода логина/пароля необходимо например выбор роли или если роль одна то вернуть результат авторизации - пример из реального проекта)))
источник

Вキ

Вертихвост キバ in AngularPiter - русскоговорящее сообщество
Александр Семенов
Например, диалоговое окно, возвращает результат и дальше в зависимости от этого результата по цепочке выполняем действия или на подобие таких примеров более приближенных к реальным
Привет, спасибо за идею) Это больше как пожелание услышать или как вопрос?

Конечно же, тут не нужно возводить все в абсолют, главное следовать простому правилу — не забыть отписаться :)
источник

АС

Александр Семенов in AngularPiter - русскоговорящее сообщество
Это в целом скорее мое личное мнение про подобные статьи)))
источник

АС

Александр Семенов in AngularPiter - русскоговорящее сообщество
Александр Семенов
Это в целом скорее мое личное мнение про подобные статьи)))
Что нужны примеры не абстрактные а более реальные...
источник

АС

Александр Семенов in AngularPiter - русскоговорящее сообщество
<code>public onLogin(docDepId: number | null): void {
   this.isProgress = true;
   this.userService
     .login(this.passwd, docDepId)
     .pipe(
       finalize(() => (this.isProgress = false)),
       catchError(err => {
         if (err instanceof ErrorEvent) {
           this.alert.error(
             <p>Ошибка - сервис не доступен, попробуйте повторить попытку позднее</p>
           );
         } else {
           const error = err.error;
           if (error.errorCode === 'ManyUserRoles' && docDepId === null) {
             this.roleMsg = error.errorMsg;
             if (this.returnUrl === 'index') {
               this.router.navigate(['role']).then();
             } else {
               this.router
                 .navigate(['role'], {
                   queryParams: { returnUrl: this.returnUrl }
                 })
                 .then();
             }
             return this.userService.getLoginRoles(error.doctorId);
           }
         }
         return throwError(err);
       }),
       tap(res => {
         if (res instanceof Array) {
           this.roleList$.next(res);
         } else {
           this.authStateService.setAuthState(true);
           this.authStateService.setAuthDoctor(<IDoctor>res);
         }
       }),
       mergeMap(value => {
         return AuthService.isToken(value)
           ? this.userService.getDoctorInfo()
           : of();
       }),
       takeUntil(this._onDestroy$)
     )
     .subscribe(
       result => {
         const doctor = this.authStateService.getAuthDoctor();
         const doctorInfo: IDoctor = result;
         doctorInfo.token = doctor.token;
         doctorInfo.userId = doctor.userId;
         this.authStateService.setAuthDoctor(doctorInfo);
         this.router.navigate([this.returnUrl]).then();
       },
       error => {
         if (error.error && error.error.errorMsg) {
           this.alert.error(<p>${error.error.errorMsg}</p>);
         } else {
           this.alert.error(
             <p>Не удалось авторизоваться в системе пожалуйста обратитесь к поставщику услуг</p>
           );
         }
       }
     );
 }</code>
источник

АС

Александр Семенов in AngularPiter - русскоговорящее сообщество
Например в этом коде я так понимаю у меня не происходит отписка от - this.userService.getDoctorInfo() или of():

mergeMap(value => {
         return AuthService.isToken(value)
           ? this.userService.getDoctorInfo()
           : of();
       }),
источник

Вキ

Вертихвост キバ in AngularPiter - русскоговорящее сообщество
Александр Семенов
<code>public onLogin(docDepId: number | null): void {
   this.isProgress = true;
   this.userService
     .login(this.passwd, docDepId)
     .pipe(
       finalize(() => (this.isProgress = false)),
       catchError(err => {
         if (err instanceof ErrorEvent) {
           this.alert.error(
             <p>Ошибка - сервис не доступен, попробуйте повторить попытку позднее</p>
           );
         } else {
           const error = err.error;
           if (error.errorCode === 'ManyUserRoles' && docDepId === null) {
             this.roleMsg = error.errorMsg;
             if (this.returnUrl === 'index') {
               this.router.navigate(['role']).then();
             } else {
               this.router
                 .navigate(['role'], {
                   queryParams: { returnUrl: this.returnUrl }
                 })
                 .then();
             }
             return this.userService.getLoginRoles(error.doctorId);
           }
         }
         return throwError(err);
       }),
       tap(res => {
         if (res instanceof Array) {
           this.roleList$.next(res);
         } else {
           this.authStateService.setAuthState(true);
           this.authStateService.setAuthDoctor(<IDoctor>res);
         }
       }),
       mergeMap(value => {
         return AuthService.isToken(value)
           ? this.userService.getDoctorInfo()
           : of();
       }),
       takeUntil(this._onDestroy$)
     )
     .subscribe(
       result => {
         const doctor = this.authStateService.getAuthDoctor();
         const doctorInfo: IDoctor = result;
         doctorInfo.token = doctor.token;
         doctorInfo.userId = doctor.userId;
         this.authStateService.setAuthDoctor(doctorInfo);
         this.router.navigate([this.returnUrl]).then();
       },
       error => {
         if (error.error && error.error.errorMsg) {
           this.alert.error(<p>${error.error.errorMsg}</p>);
         } else {
           this.alert.error(
             <p>Не удалось авторизоваться в системе пожалуйста обратитесь к поставщику услуг</p>
           );
         }
       }
     );
 }</code>
Тут на самом деле вопрос больше к декомпозиции, например, пусть как в вашем примере необходимо выбрать роль, то для этого достаточно вынести ее получение в отдельный Observable, и, например, воспользоваться оператором switchMapTo, если там нет никаких входных параметров. Тогда код будет проще

Так же можно с чем угодно поступать, например, необходимо запустить диалоговое окно, где у пользователя спрашивают его гендер. Точно так же выносится в отдельный Observable, и используя HOO операторы навершивается на основной поток с логикой. И нам посути не особо важно от куда оно пришло: хоть из памяти или бекенда, или пользователь в консоли ввел.
источник
2018 December 09

Вキ

Вертихвост キバ in AngularPiter - русскоговорящее сообщество
🔥 Как писать оптимизированный код на JS! 🚀
https://twitter.com/thekiba_io/status/1071838802988142592
источник
2018 December 12

Вキ

Вертихвост キバ in AngularPiter - русскоговорящее сообщество
Если кому интересно, то насобирал несколько полезных статей по typescript, schematics, bazel. Если у кого есть еще что, делитесь, добавлю в этот список.

Using TypeScript Compiler API
https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API

TypeScript parser
https://babeljs.io/docs/en/babel-parser

Configuring Schematics
https://medium.com/rocket-fuel/angular-schematics-simple-schematic-76be2aa72850

Schematics utilities
https://nitayneeman.github.io/schematics-utilities

Angular with Bazel example
https://github.com/alexeagle/angular-bazel-example/tree/cli

TypeScript Rules for Bazel
https://www.youtube.com/watch?v=Qb3tykleV_g
https://github.com/bazelbuild/rules_typescript
https://github.com/alexeagle/angular-bazel-example/wiki/TypeScript-rules

Bazel and package.json dependencies
https://github.com/bazelbuild/rules_nodejs

Create schematics
https://medium.com/@jorgeucano/your-fist-angular-schematics-f711d70cb37c

Angular devkit schematics
https://github.com/angular/angular-cli/tree/master/packages/angular_devkit/schematics
источник

AK

Anton Karton in AngularPiter - русскоговорящее сообщество
вопрос к пользователям вебшторма: написал простейший пайп для фильтрации вида FilterPipe<T> и
 transform(value: T[], filterFunc: (a: T) => boolean): T[]. Редактор теряет тип и ругается T does not contain such a member. Как лечить?
источник

АД

Александр Духовняк in AngularPiter - русскоговорящее сообщество
Давай сделаем с тобой ресурс свои архивы, плюс ребятам дадим возможность кидать и рейтингом полезности, интересности и тд?

Одному руки не доходили, но на 2- можно раскидать
источник