Arrays 使用Angular2中的接口将对象推入新数组
我正在从Angular2中的服务检索对象列表 单击后,我想将ngFor中的对象放入一个新数组(具有相同的界面) 我可以很好地显示包含项目的列表。我还能够显示我在控制台中选择的项目,但我无法将此对象推入具有相同界面的新数组 我的界面:Arrays 使用Angular2中的接口将对象推入新数组,arrays,service,components,angular,Arrays,Service,Components,Angular,我正在从Angular2中的服务检索对象列表 单击后,我想将ngFor中的对象放入一个新数组(具有相同的界面) 我可以很好地显示包含项目的列表。我还能够显示我在控制台中选择的项目,但我无法将此对象推入具有相同界面的新数组 我的界面: export interface Item { id: string, name: string, icon_url: string, exterior: string, type: string, tag: stri
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);
}
}
我的组件:
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);
}
}
从'angular2/core'导入{Component,OnInit,DoCheck};
从“/../interfaces/interfaces.ts”导入{Item};
从“/../services/item.service.ts”导入{ItemService};
@组成部分({
模板:`
添加项
-
{{item.name}
`
})
导出类AddTradeComponent实现OnInit{
公共项目:项目[];
公共选择项:项[];
构造函数(私有_itemService:itemService){}
getUserItems(){
this.\u itemService.getUserItems()。然后(userItems=>this.items=userItems);
}
恩戈尼尼特(){
这是getUserItems();
}
onSelect(项目){
console.log('items',item);
此项。选择编辑项。推送(项);
}
}
我收到的错误:
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”
记录对象工作正常,我只是无法将其推到这个位置。请选择EdItems。您没有初始化数组。在声明成员变量时初始化数组:
public items: Item[] = [];
public selectedItems: Item[] = [];
或者在构造函数中初始化它们:
constructor() {
this.items = [];
this.selectedItems = [];
}
这是因为您尚未初始化属性。只需将其更改为
publicselecteditems:Item[]=[]代码>哇,老兄,这么简单啊。非常感谢!不过还是有个简单的问题。虽然填充items数组很有效,但也没有初始化。这是怎么回事?