Angular,在数组上订阅不起作用

时间:2018-02-24 15:43:00

标签: html angular typescript angular2-observables

我正在做一个alert.service。我的服务包含一个名为Alert的模型数组。

这是alert.service

"division by zero"

从我的alert.component,我调用此服务并订阅队列的observable:

"integer division or modulo by zero"

在我的模板中,我点击了一个触发方法@Injectable() export class AlertService { private queue: Alert[] = new Array<Alert>(); constructor() { } getInstance() : Observable<Alert[]> { return of(this.queue); } push(type: string, title: string, message: string) { let alert = new Alert(type, title, message); this.queue.push(alert); window.setTimeout(_ => { this.pop(); },3000); } pop() { this.queue.pop(); } } (被称为)的按钮。

但是console.log(val)只返回一次值。这是我的队列服务数组实例化时的值。

我做错了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

最后,

我自己管理我的数组上的BehaviorSubject。

@Injectable()
export class AlertService {

  private queue: Alert[] = new Array<Alert>();
  private behaviorSubjectQueue: BehaviorSubject<Alert[]> = new BehaviorSubject<Alert[]>(this.queue);

  constructor() {
  }

  getInstance() {
    return this.behaviorSubjectQueue;
  }

  push(type: string, title: string, message: string) {
    let alert = new Alert(type, title, message);

    this.queue.push(alert);
    this.behaviorSubjectQueue.next(this.queue);
    window.setTimeout(_ => {
      this.pop();
    },3000);
  }

  pop() {
    this.queue.pop();
    this.behaviorSubjectQueue.next(this.queue);
  }
}

该组件保持不变,但会在每次推送和弹出操作时得到通知。

谢谢大家的帮助!