Если вы собираетесь подписаться на наблюдаемое внутри трубы, то вы должны отписаться , когда труба разрушена. Вы используете takeUntil () для автоматической отмены подписки с помощью обратного вызова ngOnDestroy .
export class TemperatureConverterPipe implements PipeTransform, OnDestroy {
private _destroyed: Subject<void> = new Subject();
public ngOnDestroy {
this._destroyed.next();
this._destroyed.complete();
}
}
Когда вы изменяете внутреннее состояние трубы, вы должны уведомить Angular об изменении view . Вы можете сделать это, используя ChangeDetectorRef .
private lang: any;
constructor(private _translateService: TranslateService,
private language: LanguageProvider,
private ref: ChangeDetectorRef) {
this.language.getLanguage()
.pipe(takeUntil(this._destroyed))
.subscribe((value) => {
this.lang = value;
ref.markForCheck();
});
}
Теперь вы можете использовать значение из службы getLanguage()
в функции преобразования.
transform(value: number, unit?: string) {
unit = unit || this.lang;
....
}
Когда служба выдает изменение языка, канал запускает обнаружение изменений в представлении, и вы должны увидеть представление обновленным.