2016-11-23 1 views
0

を変更した後、私は、オブジェクトを含む配列を反復更新していない:テンプレートは、モデルが

<tr *ngFor="let file of files | orderBy: 'id':ascending:true | paginate: {id: 'FilePagination',itemsPerPage: 20, currentPage: p}"> 
    <th [innerHTML]="project.files.indexOf(file)+1" scope="row"></th> 
    <td><a href="{{file.uri + token}}" target="_blank"><i class="fa" 
                  [class.fa-file-audio-o]="types.audio.includes(file.type)" 
                  [class.fa-file-pdf-o]="types.document.includes(file.type)"></i>{{" 
     " + file.fullName}}</a> 
    </td> 
    <td>{{file.size}}</td> 
    <td>{{file.timestamp | timeCalc}}</td> 
    <td *ngIf="adminMode"> 
     <button type="button" (click)="deleteFile(file)" 
       class="fa fa-trash-o btn btn-link p-0" title="Löschen"></button> 
    </td> 
</tr> 

DELETEFILEメソッドの呼び出し:サブスクリプションの呼び出しが完了すると、削除したファイルが削除されていない

deleteFile(file: File) { 
    this.loading = true; 
    this.fileService.deleteFile(file).subscribe(
     message => this.information = message, 
     error => { 
      this.loading = false; 
      this.errorMessage = error; 
     }, 
     () => { 
      this.files.splice(this.files.indexOf(file), 1); 
      this.loading = false; 
     } 
    ) 
} 

をビューから。それでも、配列内のすべてのファイルのインデックスが変更されたため、配列から確実に削除されます。

削除前:削除した後 beforeDelte


afterDelete

+0

そのコードはfまたは私は、これはかなりヘッドスケーターです。 ビュー内のオブジェクトのインスタンスは、削除されるインスタンスとまったく同じインスタンスです。 http://plnkr.co/edit/lSf7NX85HSDv4frgnXCc?p=preview – silentsod

答えて

2

あなたがオブジェクトのプロパティで、必要な要素を除外して再割り当てするfilterを使用することができます。minimableかつ検証可能である

this.files = this.files.filter(file => file.id !== fileToRemove.id);

Plunker: http://plnkr.co/edit/tpl:AvJOMERrnz94ekVua0u5?p=preview

+0

spliceは削除された要素を返すと思います。この要素をthis.filesに割り当てることはできませんか? – Lelsoos

+0

リンクされたPlunkerには割り当てがありませんが、あなたは正しいです!それをそこに残すことに私の誤り。 – silentsod

+0

Hm、私のIDEは、 "引数型はパラメータに一致しません"というエラーを示します。ファイルを削除しようとすると、配列内の0番目のインデックスにあるファイルが自動的に削除されます。 – Lelsoos

0

使用project.files

HTML

ここで奇妙な挙動を示す2つのスクリーンショットです
<tr *ngFor="let file of project.files | orderBy: 'id':ascending:true | paginate: {id: 'FilePagination',itemsPerPage: 20, currentPage: p};"> 
    <th [innerHTML]="project.files.indexOf(file)+1" scope="row"></th> 
    <td><a href="{{file.uri + token}}" target="_blank"><i class="fa" 
                  [class.fa-file-audio-o]="types.audio.includes(file.type)" 
                  [class.fa-file-pdf-o]="types.document.includes(file.type)"></i>{{" 
     " + file.fullName}}</a> 
    </td> 
    <td>{{file.size}}</td> 
    <td>{{file.timestamp | timeCalc}}</td> 
    <td *ngIf="adminMode"> 
     <button type="button" (click)="deleteFile(file)" 
       class="fa fa-trash-o btn btn-link p-0" title="Löschen"></button> 
    </td> 
</tr> 

削除機能

deleteFile(file: File) { 
    this.loading = true; 
    this.fileService.deleteFile(file).subscribe(
     message => this.information = message, 
     error => { 
      this.loading = false; 
      this.errorMessage = error; 
     }, 
     () => { 
      this.project.files.splice(file, 1); 
      this.loading = false; 
     } 
    ) 
} 
+0

あなたの答えをありがとう!残念ながら、これは2つの理由でうまくいきません。 - ページングによってインデックスとファイルのインデックスが入れ替わるため、ngForのインデックスが正確ではありません - あなたのやり方ではまだDOMから要素が削除されません。私はまだ迷惑な0を取得しています。 – Lelsoos

+0

そのショットを与える、project.filesに変更 – bendyourtaxes

+0

ものを変更しません。 @ silentsodと正しいと答えました。とにかく、ありがとう! – Lelsoos

関連する問題