计数器应重置为零,然后再次从1开始

时间:2019-06-10 13:12:03

标签: javascript angular typescript

我想将读取的消息数存储在一个数组中,然后根据长度和计数器值之间的差值重置计数器。

this.badgeCount = this.messages.length //5

此处 this.messages.length 来自服务中的每条消息。

每当matMenu关闭时,我会将计数器重置为零并将消息标记为已读。

menuClosed(){
 this.badgeCount = 0;

 this.messages.forEach((message: Message){
  message.read = true;
 })

}

这里的问题是 this.messages.length 始终是实际长度,我们说 5 ,所以无论何时收到新消息,长度都变成 6 ,则badgeCount从 6 而不是 0 开始。 有没有一种方法可以将读取的消息存储在数组中,然后根据消息的长度进行计算。

Here is working sample

2 个答案:

答案 0 :(得分:3)

您需要做的就是仅对服务进行计数,如下所示未读消息

this.badgeCount = this.messages.filter((message: Message) {
    return !message.read;
}).length;

答案 1 :(得分:1)

您的问题不太清楚,但我会尽力回答

如果您希望将已读消息保留在另一个数组上,则可以使用push来声明它为添加项。

menuClosed(){
 this.badgeCount = 0;
 var readMessages : Message[];

 this.messages.forEach((message: Message){
  message.read = true;
  readMessages.push(message);
 })

 //now you can use readMessages.length 
}

如果您不需要已读邮件,而只需要已读邮件的计数器...

menuClosed(){
 this.badgeCount = 0;

 this.messages.forEach((message: Message){
  message.read = true;
 })

 //keep the readMessages in a class variable and use it were needed
 this.readMessages = this.messages.length ;
}