Я хочу удалить элемент из сохраненного массива в angular 2 с помощью Type Script. Я использую службу под названием Data Service, код DataService:
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)];
}
}
И мой класс компонента:
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());
}
}
Теперь все работает нормально, кроме случаев, когда я пытаюсь удалить элемент. Журнал показывает мне, что элемент все еще находится в массиве и, следовательно, все еще отображается на странице. Как удалить элемент после выбора его кнопкой удаления ??
javascript
angular
typescript
Aghed Aljlad
источник
источник
indexOf()
for-1
, это приведет к удалению последнего элемента из массива, еслиmsg
он не был найден!Я думаю, что способ Angular 2 сделать это - метод фильтрации:
где data_item - это элемент, который следует удалить
источник
splice()
удалялось все, кроме значения, которое я хотел удалить из массиваНе используйте
delete
для удаления элемента из массива, а используйтеsplice()
вместо этого.См. Аналогичный вопрос: как удалить определенный элемент из массива в JavaScript?
Обратите внимание, что TypeScript - это надмножество ES6 (массивы одинаковы как в TypeScript, так и в JavaScript), поэтому не стесняйтесь искать решения JavaScript даже при работе с TypeScript.
источник
indexOf()
for-1
, это приведет к удалению последнего элемента из массива, еслиmsg
он не был найден!Этого можно добиться следующим образом:
this.itemArr = this.itemArr.filter( h => h.id !== ID);
источник
и
источник
Вы можете использовать это так:
источник
Иногда сращивания недостаточно, особенно если ваш массив задействован в логике ФИЛЬТРА. Итак, прежде всего вы можете проверить, существует ли ваш элемент, чтобы быть абсолютно уверенным в удалении именно этого элемента:
источник
find
, затем аfindIndex
, это два поиска, когда вы могли бы выполнить один (например, принятый ответ).Используйте
splice()
для удаления элемента из массива, чтобы обновить индекс массива.delete
удалит элемент из массива, но не обновит индекс массива, что означает, что если вы хотите удалить третий элемент из четырех элементов массива, индекс элементов будет после удаления элемента 0,1,4источник
Вы можете удалить данные из массива
источник
источник
Это работает для меня
источник