我有一个表,在其中单击行上的按钮以更新行上的布尔字段。 然后,我想刷新表。 我下面是:
SaveItem-设置我要更新的值,然后将对象,id和一个函数传递给进行调用的函数。
editItem-进行调用并更新项目,但是我然后希望它运行传入的函数,这是下面的最后一个函数getItems,它将重新填充表所基于的对象。
使用
在editItem的最后一行失败TypeError: getItems is not a function
有人可以告诉我我在做什么错吗?
SaveItem(flag: boolean) {
this.item$.Published = flag;
this.edit.editItem(this.item$, this.id, this.getItems(this.items$));
}
editItem(item, id, getItems) {
const url = this.apiUrl + '/tables/Items/' + id
this.http.patch(url, item, httpOptions).subscribe((data) => getItems(data));
}
getItems(itemList: Item[]): void{
this.data.getItems()
.subscribe(data => this.items$ = data);
}
答案 0 :(得分:1)
您必须将回调声明为平面函数,而不是函数的结果。看到这个小窍门,您可以在Typescript Scratchpad by clicking here上运行它。我确实在适用的地方写了一些评论,例如“ //这是重要的改变”。
class Item {
Published: boolean
}
class Observable {
subscribe(callback: (data: Array<Item>) => any) {
callback(new Array<Item>());
}
}
class Test {
apiUrl: string;
http = {
patch: (url, item, httpOptions) => {
return new Observable();
}
};
item$ = new Item();
items$: Item[];
id: 'someid';
edit = {
editItem: (item: any, id: string, callback: (data: Item[]) => void) => {
// THIS IS THE IMPORTANT CHANGE
return this.editItem(item, id, callback);
}
}
data = {
getItems: () => {
return new Observable();
}
};
editItem(item, id, getItems) {
const httpOptions: any = {};
const url = this.apiUrl + '/tables/Items/' + id
this.http.patch(url, item, httpOptions).subscribe((data) => this.getItems(data));
}
getItems(itemList: Item[]): void {
this.data.getItems()
.subscribe(data => { this.items$ = data; alert("Hey! I got called"); });
}
SaveItem(flag: boolean) {
this.item$.Published = flag;
// THIS IS THE IMPORTANT CHANGE
this.edit.editItem(this.item$, this.id, this.getItems);
}
}
let test = new Test();
test.SaveItem(true);