2016-10-09 3 views
4

componentA.ts:dynamisch zu aktualisieren [geprüft] in Angular2

@Input() array; 

<input type="checkbox" [checked]="array | contains: value"/> 
<label>{{array.length}}</label> 

componentB.ts:

@Component({ 
    selector: 'app-component-b', 
    templateUrl: './app.component-b.html' 
}) 
export class AppComponentB { 
    array = [1, 2, 3]; 
} 

I array in einigen anderen Komponenten aktualisieren. Während die label die Länge des Arrays korrekt aktualisiert, scheint das Kontrollkästchen nicht aktualisiert zu werden. contains ist nur ein einfaches Rohr, das prüft, ob value Teil von array ist. Ich habe eine console.log in die contains Pipe und bekam nur die Ausgabe, wenn die Seite zuerst rendert, nicht wenn array geändert wird. Warum ist das?

Dank ..

+0

Können Sie zeigen, wo genau das Array definiert ist? ist es in Service oder Komponente? – micronyks

+0

Es ist nur eine Variable in einer Komponente. Ich habe oben einen Code hinzugefügt. – 7ball

Antwort

3

das, weil ist, wenn Sie push verwenden neues Element Array hinzufügen dann die Array-Referenz nicht geändert wird, während reines Rohr nur dann ausgeführt wird, wenn es eine reine Änderung der Eingangswert erfasst (array und value in Ihrem Fall)

Es gibt zwei Lösungen:

1) return new Array

this.array = this.array.concat(4) 

oder

this.array = [...this.array, 4]; 

Plunker

2) verwenden unreine Rohr

@Pipe({name: 'contains', pure: false}) 
export class ContainsPipe implements PipeTransform { 

Plunker

Weitere Details finden Sie auch

+0

Danke! Das war's. – 7ball

Verwandte Themen