javascript - ukloni stavku iz pohranjenog niza u angular 2
Želim ukloniti stavku iz pohranjenog niza u Angular 2, s Type Scriptom. Koristim uslugu pod nazivom Data Service, DataService Code:
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 komponente:
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());
}
}
Sada sve radi dobro osim kada pokušam izbrisati stavku. Dnevnik mi pokazuje da je stavka još uvijek u nizu i stoga se i dalje prikazuje na stranici. Kako mogu ukloniti stavku nakon što je odaberem pomoću gumba za brisanje?
Odgovor #1
Ne možete koristiti delete za uklanjanje stavke iz niza. To se koristi samo za uklanjanje svojstva iz objekta.
Trebali biste koristiti splice za uklanjanje elementa iz niza:
deleteMsg(msg:string) {
const index: number = this.data.indexOf(msg);
if (index !== -1) {
this.data.splice(index, 1);
}
}
Odgovor #2
Mislim da je Angular 2 način za to korištenje metode filter:
this.data = this.data.filter(item => item !== data_item);
gdje je data_item stavka koja treba biti obrisana
Odgovor #3
Nemojte koristiti delete za uklanjanje stavke iz niza, već koristite splice().
this.data.splice(this.data.indexOf(msg), 1);
Pogledajte slično pitanje: Kako ukloniti određeni element iz niza u JavaScriptu?
Imajte na umu da je TypeScript nadskup ES6 (nizovi su isti i u TypeScriptu i u JavaScriptu), pa slobodno tražite JavaScript rješenja čak i kada radite s TypeScriptom.
Odgovor #4
<tbody *ngFor="let emp of $emps;let i=index">
<button (click)="deleteEmployee(i)">Delete</button></td>
i
deleteEmployee(i)
{
this.$emps.splice(i,1);
}
Odgovor #5
Možete koristiti ovako:
removeDepartment(name: string): void {
this.departments = this.departments.filter(item => item != name);
}
