Chcę usunąć element z przechowywanej tablicy w kątowej 2 za pomocą skryptu typu. Korzystam z usługi o nazwie Usługa danych, kod usługi danych :
export class DataService {
private data: string[] = [];
addData(msg: string) {
this.data.push(msg);
}
getData() {
return this.data;
}
deleteMsg(msg: string) {
delete [this.data.indexOf(msg)];
}
}
I moja klasa komponentów:
import {Component} from '@angular/core'
import {LogService} from './log.service'
import {DataService} from './data.service'
@Component({
selector: 'tests',
template:
`
<div class="container">
<h2>Testing Component</h2>
<div class="row">
<input type="text" placeholder="log meassage" #logo>
<button class="btn btn-md btn-primary" (click)="logM(logo.value)">log</button>
<button class="btn btn-md btn-success" (click)="store(logo.value)">store</button>
<button class="btn btn-md btn-danger" (click)="send()">send</button>
<button class="btn btn-md " (click)="show()">Show Storage</button>
<button (click)="logarray()">log array</button>
</div>
<div class="col-xs-12">
<ul class="list-group">
<li *ngFor="let item of items" class="list-group-item" #ival>
{{item}}
<button class="pull-right btn btn-sm btn-warning" (click)="deleteItem(ival.value)">Delete
</button>
</li>
</ul>
</div>
<h3>{{value}}</h3>
<br>
</div>
`
})
export class TestsComponent {
items: string[] = [];
constructor(
private logService: LogService,
private dataService: DataService) {
}
logM(message: string) {
this.logService.WriteToLog(message);
}
store(message: string) {
this.dataService.addData(message);
}
send(message: string) {
}
show() {
this.items = this.dataService.getData();
}
deleteItem(message: string) {
this.dataService.deleteMsg(message);
}
logarray() {
this.logService.WriteToLog(this.items.toString());
}
}
Teraz wszystko działa dobrze, z wyjątkiem sytuacji, gdy próbuję usunąć element. Dziennik pokazuje, że element nadal znajduje się w tablicy i dlatego jest nadal wyświetlany na stronie. Jak mogę usunąć element po wybraniu go przyciskiem usuwania?
javascript
angular
typescript
aghed aljlad
źródło
źródło
indexOf()
dla-1
, spowoduje to usunięcie ostatniego elementu z tablicy, jeślimsg
nie został znaleziony!Myślę, że sposobem Angulara 2 jest to metoda filtrowania:
gdzie data_item to element, który powinien zostać usunięty
źródło
splice()
Nie używaj
delete
do usuwania elementu z tablicy i używajsplice()
zamiast tego.Zobacz podobne pytanie: Jak usunąć określony element z tablicy w JavaScript?
Zwróć uwagę, że TypeScript jest nadzbiorem ES6 (tablice są takie same zarówno w języku TypeScript, jak i JavaScript), więc nie krępuj się szukać rozwiązań JavaScript, nawet podczas pracy z TypeScript.
źródło
indexOf()
dla-1
, spowoduje to usunięcie ostatniego elementu z tablicy, jeślimsg
nie został znaleziony!Można to osiągnąć w następujący sposób:
this.itemArr = this.itemArr.filter( h => h.id !== ID);
źródło
i
źródło
Możesz użyć w ten sposób:
źródło
Czasami splice nie wystarcza, zwłaszcza jeśli twoja tablica jest zaangażowana w logikę FILTER. Więc przede wszystkim możesz sprawdzić, czy twój element istnieje, aby mieć absolutną pewność, że usuniesz dokładnie ten element:
źródło
find
, a potem afindIndex
, to dwa wyszukiwania, kiedy możesz zrobić jedno (jak zaakceptowana odpowiedź).Użyj,
splice()
aby usunąć element z tablicy, aby odświeżyć indeks tablicy.delete
usunie element z tablicy, ale nie odświeży indeksu tablicy co oznacza, że jeśli chcesz usunąć trzecią pozycję z czterech elementów tablicy, indeks elementów będzie po usunięciu elementu 0,1,4źródło
Możesz usunąć dane z tablicy
źródło
źródło
To działa dla mnie
źródło