2017-11-01 17 views
0

通常、これはリアルタイムで更新されると思われますが、そうではないようです。角2 - 更新*データが変更された後のテーブルng

var myArray= [{id:"name1",array:{"id1", "id2"}] 

そして、私のhtmlで、私は行のmyArray

<table *ngFor="item in myArray"> 
    <td>{{item.id}}</td> 
    <td>{{item.array}}</td> 
</table> 
内のすべての項目を一覧表示し、テーブルを持っている:私の角度のアプリでは、私は、文字列などのような別の配列を格納する配列を持っています

arrayの項目は、ボタンのクリックにバインドされた機能で追加されます。したがって、ユーザーはアイテムのリストから選択し、ボタンをクリックし、それらの選択肢はarrayにプッシュされます。彼らはまた戻ってそれらのアイテムのいくつかを削除することができるので、私はmyArrayのすべてのアイテムのチェックを処理するコードを追加していて、そのarrayに削除されたアイテムが含まれている場合は削除されます。

for(let i=0; i<myArray.length;i++) { 
    let row:any = myArray[i]; 
    for(let k=0; k<row.array.length;k++) { 
    if(row.array[k] == deletedItem) { 
     row.array.splice(index, 1); 
    } 
    } 
} 

コードは、私がdeletedItemが(混乱変数名のために残念!)myArrayさんarrayの任意の項目から削除されていることを見ることができる午前コンソールログを使用して、動作します。ただし、コンソールに送信または印刷するときにmyArrayに表示されていても、更新された値はテーブルに反映されません。テーブルをリフレッシュする必要がありますか?データがバインドされているので、自動的に更新する必要があります。

+0

それはもちろん、ないという理由だけで、変数名の紛らわしいですが、彼らがあなたのコードで何を表しているかは明らかではないので。例えば、 'index'&' deletedItem'です。複製を作成するか、誰かがそれをデバッグするのに十分な情報を与えてください。また、 'myArray'内の' array'プロパティは 'array'ではなく' object'として定義されているようです。 'row.array.length'の' length'を意図した方法で計算していますか? – amal

+0

@amal私は削除コードをデモしようとしています。削除コードが動作していても(コンソールログで確認されていても)、テーブルは更新されません。何らかの形でテーブルを更新する必要があるのか​​どうか疑問に思っています – user3334871

+0

この割り当てを明確にしてください: 'var myArray = [{id:" name1 "、array:{" id1 "、" id2 "}]'? '}' – amal

答えて

0

このコードから、私はmyArrayから要素を削除するのではなく、ローカル変数行から削除すると思います。そのため、テンプレートでは変更が表示されません。

はこれで試してみてください:

for(let i=0; i<myArray.length;i++) { 
    let row:any = myArray[i]; 
    for(let k=0; k<row.array.length;k++) { 
    if(row.array[k] == deletedItem) { 
     myArray[i].array.splice(k, 1); 
    } 
    } 
} 
+0

が欠けているようです。コード自体は問題ありません。コンソールログを使用してチェックすると、アイテムがグローバルな 'myArray'オブジェクトで削除されているのがわかります。問題は、視覚的には値が正しく反映されていないことです。 – user3334871

+0

StackBlitzの例ができますか? –

関連する問題