2016-11-04 2 views
2

Ich habe ein Objekt einige wie folgt aus:neue Objekteigenschaft Auf * ngFor Angular 2

this.obj = {{name: 'Hello 1'}, {'name': 'Hello 2'}} 

Ich bin eine Schleife durch dieses Objekt zu machen auf Winkel 2 (ionic2):

<div class"item" *ngFor="let item as obj"> 
    <span>{{item.name}}</span> 
    <span>{{item.count}}</span> 
</div> 

item.count existiert nicht, und offensichtlich wird es nicht in der Ansicht gerendert. Aber ich muss diese Eigenschaft in der Ansicht installieren. In Winkel 1 denke ich so etwas wie ng-init="item.count = 0" dieses Problem lösen sollte, aber es ist nicht in Angular 2.

+0

* ich diese Eigenschaft im Hinblick auf instanziiert benötigen * : Warum würden Sie das brauchen? ng-init wird in Angular 1 explizit als "fast nie verwenden" dokumentiert. Initialisieren Sie Ihre Objekte in der Komponente. Da gehört es hin. –

+0

Das Objekt wird von der API ohne die "Anzahl" analysiert. Ich werde die Buttons + und - implementieren, um item.count zu erhöhen/verringern. –

+0

Also was? Was verhindert, dass Sie jedem Objekt eine Zählung hinzufügen, nachdem sie von der API "geparst" wurden? –

Antwort

1

UPDATE PER KOMMENTAR

Die Lösung scheint ein Bug in Angular selbst zu sein, wie Aluan aktiviert bemerkt Punkt mit Eigenschaftszuweisung führt zu „Bindungen können nicht Zuweisungen in Spalte 41 enthalten“, so habe ich ein github issue

ORIGINAL

Wenn Sie es in th tun möchten geöffnet Mit der Vorlage können Sie dynamisch eine Eigenschaft in JS (die eine Obermenge von TypScript ist und daher technisch gültig ist) über die Syntax object['propertyName'] hinzufügen.

Der HTML-Code für die Vorlage wird

<div class="item" *ngFor="let item of obj"> 
    <span>{{item.name}}</span> 
    <span>{{item['count'] ? item['count'] : item['count'] = 0}}</span> 
    <button (click)="increment(item)">plus</button> 
    <button (click)="decrement(item)">minus</button> 
</div> 

und den Code für die Schaltfläche Logik:

increment(item) { 
    item.count++; 
} 

decrement(item) { 
    item.count--; 
} 

Arbeitsbeispiel: http://plnkr.co/edit/b5fe87kFm2nxs3kabZRo?p=preview

+0

Gute Lösung. Vielen Dank! –

+0

'item.count' funktioniert genauso wie 'item [' count ']' in TypeScript genau wie in JavaScript. –

+1

@AluanHaddad Sie sind richtig und ich bin falsch, das ist eigentlich eine Angular Compiler Quirk. Ändern Sie den 'item ['count']' von Plunker in 'item.count' und der Compiler wird die Zuweisung mit' item.count = 0' ersticken, aber korrekt den 'item ['count'] = 0' verarbeiten. Darüber hinaus bricht das Setzen von nur {{item.count}} ab, da es zum ursprünglichen Zeitpunkt nicht zur Laufzeit existiert. – silentsod