angular2管道和新数据

时间:2016-08-23 16:08:41

标签: angular socket.io

我正在处理角管以处理和过滤日志。

我的烟斗看起来像这样

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(&#39; message&#39;,function(message,user) {     this.messages.push({用户:用户,MSG:消息});

}

如果我输入输入文本但过滤器工作正常但是如果之后添加了新消息,那里没有显示(例如过滤),我想有什么东西可以调用来触发过滤更新?

1 个答案:

答案 0 :(得分:1)

角度变化检测不检测数组内部的更改,只检测数组实例(传递不同的数组实例)

使管道不纯净

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

每次对使用管道的组件执行更改检测时,Angular2都会执行管道。

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

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