Pull to refresh

Comments 8

В последнем примере в для атрибута test в console.log вылетает по 4 одинаковых сообщения. Похоже это связано с количеством HostBinding. Но не понятно почему. EventManager слушает события на всех атрибутах?

Да, там 4 разных байндинга, соответственно, 4 разные подписки. Можно порулить через share, но вообще это довольно экстремальный кейс, когда тебе надо на несколько сущностей забайндить один и тот же стрим :)

Не совсем понял. А почему HostBinding для атрибута active создает подписки на поток атрибута test?

И тогда получается что создается не 4 пописки, а 8: по подписке на каждый HostBinding в каждом атрибуте.

Увеличивая количество атрибутов с подобным подходом, не получим ли проблем?

console.log прописан в стриме test. Он дёргается 2 раза, потому что мы байндим его на data-test и style.height.px. Так же мы от него создаём стрим active, ведь мы его пайпим. Там ещё 2 подписки — на class._active и disabled. Если test записать вот так, то console.log будет один:


  readonly test = interval(1000).pipe(
    tap(console.log),
    startWith(0),
    share(), // <--- Добавим
  );

Проблем тут будет не больше, чем при любом другом использовании RxJS :)

Теперь понятно. Упустил, что мы пайпим первый атрибут во втором. Спасибо за разъяснение!
И еще вопрос. А в чем преимущество описания инъекции через декоратор Inject?
Так:
 constructor(
       @Inject(TuiDestroyService) destroy$: Observable<void>,
       @Inject(ChangeDetectorRef) changeDetectorRef: ChangeDetectorRef,
   ) { }

Вместо:
 constructor(
       destroy$: TuiDestroyService,
       changeDetectorRef: ChangeDetectorRef,
   ) { }

1) Так можно указывать более общий тип, чтобы, если что, подменять реализацию — в первой строчке Observable<void> а не TuiDestroyService. Даже надо бы <unknown> написать :)
2) Раньше без этого нельзя было собирать проект без метаданных, что усложняло работу с Universal
3) Токены без этого не подрубишь, а мне нравится единообразие — поэтому пишу всегда одинаково, не думая, токен там или сервис

Спасибо!
Да, действительно так получается более обобщенное объявление. На первый взгляд больше boilerplate кода, но на выходе более гибко должно быть. Надо будет попробовать )
Sign up to leave a comment.