在Angular2视图中渲染动态数组

时间:2017-02-05 22:08:34

标签: javascript angular typescript dynamic-arrays

我有一个动态数组,当我在内部添加/删除某些项目时,我想在组件的视图中呈现。

我的应用组件(ts)中的ngOnInit()方法呈现数组:

import { Component, OnInit } from '@angular/core';
import { CartService } from './cart/cart.service';

import '../style/app.scss';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
})
export class AppComponent {
    cartItems: any;
    image: any;
    item: any;

  constructor(public cartService: CartService) { }

  ngOnInit(){
    this.cartService.cart$.subscribe((val) => {
        console.log(this.cartService.cartArr)//console shows the array properly, but nothing is shown in the view if I remove "console.log"
    });

  }

}

应用程序组件(html)中的数组的“视图”

<ul class="cart">
    <li class="cart__item" *ngFor="let item of cartArr">
       ...
    </li>
</ul>

我的 CartService

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';


@Injectable()
export class CartService {
    public cart$ = new BehaviorSubject(null);
    public cartArr = [];

   constructor(){ }

   public addToCart(prod) {
       this.cartArr.push(prod);
       this.cart$.next(this.cartArr);
   }
}

所以我想知道如何在Component html中渲染数组以及为什么我的代码在控制台之外无效?

1 个答案:

答案 0 :(得分:3)

更新

正如@TuongLe在评论中所说,如果您手动订阅您的o​​bservable,那么您应该在unsubscribe中调用ngOnDestroy以防止内存泄漏。

你可以

1)设置数组值:

cartItems: any[];

cartSubscription: Subscription;

ngOnInit() {
  this.cartSubscription = this.cartService.cart$.subscribe((val) => {
    this.cartItems = val;
  });
}

ngOnDestroy() {
  this.cartSubscription.unsubscribe();
}

视图

*ngFor="let item of cartItems"

2)使用async管道,如:

*ngFor="let item of cartService.cart$ | async"