Angular * ng для доступа к массиву напрямую из сервиса - PullRequest
1 голос
/ 12 февраля 2020

В настоящее время я получаю доступ к динамическому массиву c из нескольких шаблонов в моем приложении Angular. Вот пример:

array.service.ts

@Injectable()
export class ArrayManagerService {
    public arrayDynamic = [];
    ...
    // some functions calling the api to update dynamic data
}

array-displayer.component.ts

@component({
    selector: 'app-array-displayer',
    templateUrl: 'array-displayer.component.html'
})
export class ArrayDisplayerComponent {
    constructor(public arrayManagerService: ArrayManagerService) {}
}

array-displayer.component. html

<div id="array-container">
    <div class="item" *ngFor="let item of arrayManagerService.arrayDynamic">
        {{item.name}}
    </div>
</div>

Мне интересно, является ли это приемлемым способом (главным образом в отношении производительности) или мне следует объявить массив в array-displayer.component.ts и использовать EventEmiter для его обновления при каждом обновлении массива.

1 Ответ

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

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

    @Injectable()
    export class ArrayManagerService {
        public arrayDynamic = [];
        public bSubject$ = new BehaviourSubject(this.arrayDynamic);
        // some functions calling the api to update dynamic data
        setData(a){
     this.arrayDynamic.push(a);
     this.bSubject$.next(this.arrayDynamic);
         }
    }



export class ArrayDisplayerComponent implements OnInit {
    constructor(public arrayManagerService: ArrayManagerService) {}
   ngOnInit(){
    this.arrayManagerService.bSubject$.subscribe(arrData => {
     //this.yourArray = arrData;
   });

   }

}

...