According to Angular2 pipe docs:
Angular executes a pure pipe only when it detects a pure change to the input value. A pure change is either a change to a primitive input value (String, Number, Boolean, Symbol) or a changed object reference (Date, Array, Function, Object).
Angular ignores changes within (composite) objects. It won't call a pure pipe if we change an input month, add to an input array, or update an input object property.
Reason:
This may seem restrictive but is is also fast. An object reference check is fast — much faster than a deep check for differences — so Angular can quickly determine if it can skip both the pipe execution and a view update.
So while you change your array or the elements inside the array, the arrays reference doesn't change.
So switching to .onPush
or triggering the change detection manually might solve your problem.
Source: https://angular.io/docs/ts/latest/guide/pipes.html#!#pure-and-impure-pipes