Size: a a a

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

2020 March 17

S

Sonic🌕 in Angular - русскоговорящее сообщество
Fanaticus Adminus Vulgaris
ngx-translate помоему
он ж депрекейдет, есть transloco
источник

OK

Olesya Kurilenko in Angular - русскоговорящее сообщество
Я и юзаю его
источник

OK

Olesya Kurilenko in Angular - русскоговорящее сообщество
Ng-translate
источник

VK

Vladislav K. ) in Angular - русскоговорящее сообщество
Sonic🌕
он ж депрекейдет, есть transloco
хм я что то пропустил
источник

OK

Olesya Kurilenko in Angular - русскоговорящее сообщество
Вычитала идею менять руты. Чтотрриведет к перерендованию компонентов типо ru/users or en/users
источник

R

Roman in Angular - русскоговорящее сообщество
помоему без рефреша можно. translateService.use(ключ перевода); (но это не точно, т.к. не пробовал)
источник

А

Андрей in Angular - русскоговорящее сообщество
Всем привет кто работал с devextreme? Есть вопрос по транслейт + реактивность
источник

DP

Den Politykin in Angular - русскоговорящее сообщество
Подскажите, пожалуйста, у меня идут http запросы на 1 и тот же роут, поменялись данные, полетел новый запрос, как при этом отменить предыдущий? Чтобы приложение не перегружалось
источник

AN

Andrey Nikolaev in Angular - русскоговорящее сообщество
Olesya Kurilenko
Привет всем. Есть вопрос. Хочу Вашего совета. Как реализовать структуру в многоязычном приложении? У меня есть сервис. Он дает возможность подписываться на изменении языка. Я в каждом компоненте делаю однотипное подписка на изменение- рефреш ну и изменение статусов кнопок при помощи пайпы
Все что у тебя через пайпу при изменении языка само перерендерится, что в транслоко, что в ngx-translate
источник

AE

Argument Exception in Angular - русскоговорящее сообщество
Den Politykin
Подскажите, пожалуйста, у меня идут http запросы на 1 и тот же роут, поменялись данные, полетел новый запрос, как при этом отменить предыдущий? Чтобы приложение не перегружалось
нам бы код глянуть как отправляете и как меняются данные
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Я первый раз наткнулся на проблему, что форм контролы только привязываются к вэлью аксессорам и никогда не отвязываются.
поэтому при написании кода следующего вида:

<input [formControl]="form.get(activeId)"/>

...
activeId = 0;

form = this.formBuilder.group({
 0: '',
 1: '',
 2: '',
});

После смены activeId при изменении значения контрола 0 будет обновлено значение инпута, несмотря на то, что контрол поменялся.

По сорсам придумал костыль следующего вида:

<input [formControl]="activeControl$ | async"/>

...
activeId$ = new BehaviorSubject(0);

form = this.formBuilder.group({
 0: '',
 1: '',
 2: '',
});

activeControl$ = this.activeId$.pipe(
 distinctUntilChanged(),
 map(id => this.form.get(id)),
 startWith(null),
 pairwise(),
 map(([prev, cur]) => {
   if (prev) {
     (prev as FormControl & { _clearChangeFns: () => void })._clearChangeFns();
   }
   return cur;
 }),
);

В классе FormControl есть непубличный метод _clearChangeFns, который сбрасывает массивы коллбэков контрола, что по сути и нужно.

Кто-нибудь встречал такую проблему? Какие есть варианты решения?
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Dmitry Teplov
Я первый раз наткнулся на проблему, что форм контролы только привязываются к вэлью аксессорам и никогда не отвязываются.
поэтому при написании кода следующего вида:

<input [formControl]="form.get(activeId)"/>

...
activeId = 0;

form = this.formBuilder.group({
 0: '',
 1: '',
 2: '',
});

После смены activeId при изменении значения контрола 0 будет обновлено значение инпута, несмотря на то, что контрол поменялся.

По сорсам придумал костыль следующего вида:

<input [formControl]="activeControl$ | async"/>

...
activeId$ = new BehaviorSubject(0);

form = this.formBuilder.group({
 0: '',
 1: '',
 2: '',
});

activeControl$ = this.activeId$.pipe(
 distinctUntilChanged(),
 map(id => this.form.get(id)),
 startWith(null),
 pairwise(),
 map(([prev, cur]) => {
   if (prev) {
     (prev as FormControl & { _clearChangeFns: () => void })._clearChangeFns();
   }
   return cur;
 }),
);

В классе FormControl есть непубличный метод _clearChangeFns, который сбрасывает массивы коллбэков контрола, что по сути и нужно.

Кто-нибудь встречал такую проблему? Какие есть варианты решения?
Если посмотреть на исходники, то мы видим, что логика FromControlDirective не предусматривает сброс предыдущего контрола в принципе:
https://github.com/angular/angular/blob/362b3e4d03f1ba222e3dd2002a4b85a104453159/packages/forms/src/directives/reactive_directives/form_control_directive.ts#L186
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Dmitry Teplov
Если посмотреть на исходники, то мы видим, что логика FromControlDirective не предусматривает сброс предыдущего контрола в принципе:
https://github.com/angular/angular/blob/362b3e4d03f1ba222e3dd2002a4b85a104453159/packages/forms/src/directives/reactive_directives/form_control_directive.ts#L186
Собственно говоря, сам метод _clearChangeFns:
https://github.com/angular/angular/blob/8.2.10/packages/forms/src/model.ts#L1135
источник

DP

Den Politykin in Angular - русскоговорящее сообщество
источник

DP

Den Politykin in Angular - русскоговорящее сообщество
Argument Exception
нам бы код глянуть как отправляете и как меняются данные
вот выше
источник

AE

Argument Exception in Angular - русскоговорящее сообщество
Den Politykin
вот выше
switchMap не подойдет? вместо map
источник

DP

Den Politykin in Angular - русскоговорящее сообщество
а он будет абортить уже отправленные запросы?
источник

AE

Argument Exception in Angular - русскоговорящее сообщество
конечно
источник

DP

Den Politykin in Angular - русскоговорящее сообщество
ответ на которые ещё не пришёл
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Argument Exception
switchMap не подойдет? вместо map
для этого нужно переписывать код, чтобы не подписываться внутри метода
источник