Angular * ng用于直接从服务访问数组

时间:2020-02-12 16:15:47

标签: angular performance ngfor

当前,我正在从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 中声明一个数组,并在每次数组已更新。

1 个答案:

答案 0 :(得分:1)

我认为从您的服务中,您应该返回一个可观察的对象,而您的组件则必须继续收听它的示例:

    @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;
   });

   }

}