使用Angular2中的接口将对象推送到新数组中

Posted

技术标签:

【中文标题】使用Angular2中的接口将对象推送到新数组中【英文标题】:Push object into new array with interfaces in Angular2 【发布时间】:2016-04-03 11:43:44 【问题描述】:

我正在从 Angular2 中的服务中检索对象列表。

单击时,我想将对象从我的 ngFor 放到一个新数组中(具有相同的界面)。

我能够很好地显示包含项目的列表。我还可以在控制台中显示我选择的项目,但我无法将此对象推送到具有相同界面的新数组中。

我的界面:

export interface Item 
    id: string,
    name: string,
    icon_url: string,
    exterior: string,
    type: string,
    tag: string,
    addedClass: string,
    selected: boolean

我的组件:

import Component, OnInit, DoCheck from 'angular2/core';
import Item from './../interfaces/interfaces.ts';
import ItemService from './../services/item.service.ts';


@Component(
    template: `
        <h2>Add item</h2>
        <div class="itemlist">
            <ul class="items">
                <li 
                    *ngFor="#item of items"
                    [class.selected]="item === selectedItem"
                    (click)="onSelect(item)"
                >
                    <span class="item">
                        item.name
                    </span>
                </li>
            </ul>
        </div>
    `
)

export class AddTradeComponent implements OnInit 

    public items: Item[];
    public selectedItems: Item[];


    constructor(private _itemService: ItemService)  

    getUserItems() 
        this._itemService.getUserItems().then(userItems => this.items = userItems);
    
    

    ngOnInit() 
        this.getUserItems();
    

    onSelect(item) 
        console.log('items ', item);
        this.selectedItems.push(item);
    


我遇到的错误:

评估“点击”时出错

TypeError: 无法读取未定义的属性“push”

记录对象工作正常,我只是无法将它推送到 this.selectedItems。

【问题讨论】:

那是因为你还没有初始化属性。改成public selectedItems: Item[] = []; 【参考方案1】:

你没有初始化你的数组。在声明成员变量时初始化数组:

public items: Item[] = [];
public selectedItems: Item[] = [];

或者在你的构造函数中初始化它们:

constructor() 
    this.items = [];
    this.selectedItems = [];

【讨论】:

哇老兄,这么简单啊。万分感谢!快速的问题。填充 items 数组虽然有效,但也没有初始化。它是如何工作的?

以上是关于使用Angular2中的接口将对象推送到新数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将具有多个元素的新对象推送到数组中?

Angular 2 + Ionic 2:对象推送到数组,但是当我尝试使用它时它是空的

将新评论推送到 mongoose/mongodb/angularjs 中的评论数组中

在javascript中将新元素推送到数组时出错

从数组中获取对象并推送到新数组[重复]

使用 Mongoose 将项目推送到对象中的数组