首页 > 解决方案 > (Angular)为什么我的数组没有变空?

问题描述

我有一个如下所示的 messages.component.ts:

export class MessagesComponent implements OnInit, OnDestroy {
  messages: Message[] = [];
  subscription: Subscription;

  constructor(public messagesService: MessagesService) {
    for (let i = 0; i < this.messages.length; i++) {
      if (i === 2) {
        this.messages = [];
      }
    }

    this.subscription = this.messagesService.getMessage().subscribe(message => { this.messages.push(message); });

  }

我的消息服务:

export class MessagesService {

  constructor() { }

  private subject = new Subject<Message>();

  sendMessage(type: string, message: string): void {
    this.subject.next({text: message, type });
  }

  clearMessages(): void {
    this.subject.next();
  }

但是我的for循环没有变空,在我有2个条目之后,为什么?

标签: angularfor-loop

解决方案


我会试试这个:

this.subscription = this.messagesService.getMessage().subscribe(
  message => { 
    if (this.message.length >= 3)
      this.message= [];
    this.messages.push(message);
  }
);

在您的示例中,您仅在构建组件时添加一个条件,该组件甚至可能还没有订阅。在这里,您检查 index 是否2(从 0 开始)相当于array.length >= 3. 所以诀窍是在每次数据检索时检查数组长度。

现在,如果您仍然想要它,for-loop它会像这样

this.subscription = this.messagesService.getMessage().subscribe(
  message => { 
    for (let i = 0; i < this.messages.length; i++) {
      if (i === 2) {
        this.messages = [];
      }
    }
    this.messages.push(message);
  }
);

推荐阅读