Ich bin neu in Angular, also bitte verzeihen Sie mir, wenn ich don t verwenden Sie die richtige Terminologie.Angular 4: Bind nur einmal zu Methode, die verspricht
Ich versuche, eine Tabelle dynamisch zu erstellen, indem Sie die TD-Daten an einen Methodenaufruf binden. Wie folgt aus:
<tbody>
<tr *ngFor="let rw of ParameterRowData" >
<td *ngFor="let field of fields" class="lalign" [innerHTML]="getCellData(field, rw.ParameterData)" ></td>
<td><a >Edit</a> </td>
</tr>
</tbody>
Ich tue dies, weil ich nicht die verfügbaren Spalten und Daten kennen, bis sie vom Server zurückgegeben wird. Mein Problem ist, dass die Methode getCellData immer und immer wieder aufgerufen wird. Der Browser friert ein, aber in der Konsole kann ich sehen, dass er immer wieder bis ins Unendliche aufgerufen wird. Ich möchte nur, dass es einmal angerufen wird.
die getCellData Methode ist wie folgt:
getCellData(field: ParamField, fields : ParameterRowFieldContract[]) : Promise<string>
{
for(var i=0; i<fields.length; i++)
{
if(fields[i].Name===field.DisplayName)
{
console.log('a');
if(field.DataType == "FOREIGNKEYLIST")
{
//getforeign key value to display
console.log('b');
var value = this.paramService.getParameterDataWithId(field.ForeignParameter, fields[i].Value)
.then(para => {
for(var k=0; k<para.ParameterData.length; k++)
{
console.log('c');
if(para.ParameterData[k].Name===field.ForeignField)
{
console.log('foreign ='+ para.ParameterData[k].Value);
return para.ParameterData[k].Value;
}
}
});
return value;
}
else
{
return Promise.resolve(fields[i].Value);
}
}
}
}
Am Ende des Tages möchte ich nur aus dem Dienst im HTML-Element td den zurückgegebenen Wert anzuzeigen. Ich bin bereit, einen alternativen Weg zu gehen, um dieses Problem zu lösen. Die Daten werden nicht bearbeitet, sobald sie in die Tabelle geladen sind, aber ich bin mir nicht sicher, ob eine unidirektionale Bindung mir helfen kann und ich noch nicht verstehe, wie eine unidirektionale oder eine zweiseitige Bindung implementiert werden kann.
Vielen Dank im Voraus für Ihre Unterstützung.
Sie brauchen ein gutes Verständnis der eckigen Konzepte vor dem Erstellen solcher Anwendung. –
Das stimmt. Aber ich wurde in das tiefe Ende geworfen. Das ist meine Chance zu beeindrucken, also keine andere Wahl. – peterpie
Vielleicht könnte ein kundenspezifisches eckiges Rohr eine einfachere Lösung gewesen sein?Wie die letzte Lösung in dieser Frage: [stackoverflow question] (https://stackoverflow.com/questions/34363161/angular-2-displaying-async-object-data-from-promise) – peterpie