Quero remover um item de um array armazenado no angular 2, com Type Script. Estou usando um serviço chamado Data Service, o 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)];
}
}
E minha classe de componente:
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());
}
}
Agora, tudo está funcionando bem, exceto quando tento excluir um item. O log me mostra que o item ainda está na matriz e, portanto, ainda é mostrado na página. Como posso remover o item após selecioná-lo com o botão Excluir ??
javascript
angular
typescript
Aghed Aljlad
fonte
fonte
indexOf()
for-1
, isso removerá o último item do array quandomsg
não foi encontrado!Acho que a maneira do Angular 2 de fazer isso é o método de filtro:
onde data_item é o item que deve ser excluído
fonte
splice()
estava removendo tudo, exceto o valor que eu queria remover da matrizNão use
delete
para remover um item da matriz e use em seusplice()
lugar.Veja uma pergunta semelhante: Como faço para remover um elemento específico de uma matriz em JavaScript?
Observe que o TypeScript é um superconjunto do ES6 (os arrays são iguais tanto no TypeScript quanto no JavaScript), portanto, sinta-se à vontade para procurar soluções JavaScript mesmo quando estiver trabalhando com TypeScript.
fonte
indexOf()
for-1
, isso removerá o último item do array quandomsg
não foi encontrado!Isso pode ser alcançado da seguinte forma:
this.itemArr = this.itemArr.filter( h => h.id !== ID);
fonte
e
fonte
Você pode usar assim:
fonte
Às vezes, a emenda não é suficiente, especialmente se o seu array estiver envolvido em uma lógica FILTER. Portanto, em primeiro lugar, você pode verificar se o seu elemento existe para ter certeza absoluta de remover esse elemento exato:
fonte
find
, então afindIndex
, são duas pesquisas em que você poderia fazer uma (como a resposta aceita).Use
splice()
para remover o item do array e atualizar o índice do array para ser consequência.delete
irá remover o item da matriz, mas não atualizará o índice da matriz o que significa que se você deseja remover o terceiro item de quatro itens da matriz o índice dos elementos ficará depois de excluir o elemento 0,1,4fonte
Você pode excluir os dados da matriz
fonte
fonte
Isso funciona para mim
fonte