从数组中删除对象 typescript(Angular 2)

7

我只是尝试在typescript中从数组中删除对象,在angular 2.4.0中,让我展示代码,这是我的html文件:

button type="submit" (click)="addAnotherLanguague()" >Add non native languague</button>
<li *ngFor="let languague of listOfLanguagues;">
     <div class="form-item form-item--text">
           <label class="label invisible">Years studied</label>
           <input type="number" min="0" [(ngModel)]="languague.yearsStudied" name="years"  placeholder="Years studied"/>
     </div>
<button type="submit" (click)="removeLanguague(languague)" >Remove</button> // here you can see use of method
</li>

还有component.ts文件

(...)
this.listOfLanguagues = new Array <LanguagueInformationData>();
    }
addAnotherLanguague(){
        this.listOfLanguagues.push(new LanguagueInformationData);
    }
    removeLanguague(languague){
        this.listOfLanguagues.slice(this.listOfLanguagues.indexOf(languague), 1);
    }
(...)

添加操作很顺利,但我尝试了所有方法仍然不知道如何转移该语言的引用。 我不想使用 .pop,因为我想删除正好在下面的这个按钮下面的语言。 你能帮我吗?

[编辑] 我再次遇到了这个代码问题,因为每次尝试添加新语言(push)时它会清除数组中现有类的数据,你知道是什么原因吗?


可能是从Angular 2中存储的数组中删除项目的重复问题。 - Poul Kruijt
我稍微修改了一下我的问题,因为出现了新的问题。 - Jędrek Markowski
2个回答

21

<li *ngFor="let language of listOfLanguages; let i = index">

<button type="submit" (click)="removeLanguage(language, i)" >删除</button>

removeLanguague(languague, index){
    this.listOfLanguagues.splice(index, 1);
}

5
如果不使用语言参数,为什么要传递它呢? - Ricardo Gellman
在我看来,语言对象将在您进行服务调用以从数据库中删除语言时需要。 - B. S. Rawat

13

你必须使用 splice 而不是 slice

this.listOfLanguagues.splice(this.listOfLanguagues.indexOf(languague), 1);

slice方法返回数组的一部分,splice方法从数组中删除元素,并在必要时插入新元素以替换它们,然后返回被删除的元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接