2016-08-23 59 views
1

我正在处理和过滤日志的角管道。angular2管道和新数据

我管看起来像这样

import {Injectable, Pipe,PipeTransform} from '@angular/core'; 

@Pipe({ 
name: 'logFilter' 
}) 
@Injectable() 
export class logFilterPipe implements PipeTransform { 
    transform(items: any[], args: any[]): any { 
    //console.log(items); 

    if (!args || args.length == 0) 
    { 
     return items; 
    } 

    return items.filter(item => item.msg.indexOf(args[0]) !== -1); 

} 
} 

HTML部分

<input type="text" [(ngModel)]="filterLog" class="validate" /> 

<ul id="messages"> 
    <li *ngFor="let msg of messages | logFilter:filterLog"> <div class="chip">{{ msg.user }}</div> {{ msg.msg }}</li> 
</ul> 

新的消息可以被添加抛出socket.io输入

this.socket.on( '消息',功能(消息,用户) {this.messages.push({user:user,msg:message});

}

如果我在输入文本中输入,但如果在那之后又添加了新消息,并且没有显示(例如过滤),那么过滤器可以正常工作,我猜有些东西要触发过滤更新?

回答

1

角变化检测没有检测到阵列内的变化,只有阵列实例的变化(通过一个不同的阵列实例)

使管不纯

@Pipe({ 
name: 'logFilter', 
pure: false 
}) 

使得Angular2执行管每次变化检测对使用管道的组件执行。

或者,您也可以在每次修改后使用this arr = this.arr.splice()来创建数组的不同副本,以便通过Angular通知更改。

它取决于用例和数组大小哪种方法更有效。