Должен ли я подписаться или использовать свойства поддержки для обновления зависимых данных в компоненте? - PullRequest
0 голосов
/ 01 февраля 2020

Мне трудно понять, каковы лучшие практики для Angular.

У меня возникла следующая проблема:

<div>
   <app-child [data]="data | async"> 
   </app-child>
</div>

Должен ли я сделать следующее:

A: Используйте свойства Backing для обновления соответствующего значения

class ChildComponent{
     @Input 
     set data(value){
        this._data =value;
        this.label = this.labelService.getLabelColor(value.warningperiod)
     }
     get data(){ return this._data}
     _data: object;

     labelColor:string
     // constuctor... 
}

B: использовать Observables и подписки

<div>
   <!-- pass down the whole observable -->
   <app-child [data]="data"> 
   </app-child>
</div>
class ChildComponent implements OnInit{
     @Input data: Observable<object>;
      labelColor: String;
      onInit(){
         this.data
         .subscribe( value =>{
              this.labemColor= this.labelService
.getLabelColor(value.warningPeriod)
          }) 
      }
      //constructor

}

Что лучше?

Когда я подписываюсь, мне нужно отписаться, и это «раздражает».

В какой ситуации я должен делать что?

1 Ответ

1 голос
/ 01 февраля 2020

Если вам не нужно изменять асинхронные данные, AsyncPipe - лучший вариант, потому что вам не нужно помнить об отмене подписки (избегая утечек памяти) и обнаруживать изменения, которые будут сделаны на заднем плане.

Если вам нужно изменить данные, выполните некоторые действия после получения новых данных, в этом случае лучше подписаться на .ts, но вы должны помнить об отмене подписки, и если вы установили ChangeDetectionStrategy.OnPush, вам нужно запустить detectChanges.

Итак, вы должны использовать AsyncPipe в большинстве случаев, подписывайтесь только тогда, когда вам это действительно нужно.

...