我有一个服务类,其中包含一系列类似这样的任务:
import { ObservableArray, ChangedData } from 'tns-core-modules/data/observable-array/observable-array';
quests: ObservableArray<Quest>;
我可以像这样将任务推入数组:
let quest = new Quest(data.key, data.value["name"], data.value["description");
this.quests.push(quest);
在另一个类中,我订阅该数组的更改事件:
this.myService.quests.on(ObservableArray.changeEvent,(args:ChangedData<Quest>) => {
console.log(args.object);
let quest: Quest = args.object; // can not cast to quest
});
在日志中,我可以看到我的数据位于ChangeData
内部。但是我非常无法将其投射回我的对象。
我该如何实现?
谢谢
答案 0 :(得分:2)
我为您here找到了解决方案。问题是打字。它没有显示您需要的属性。因此,只需使其类型为any
,基本上,您需要执行以下操作:
this.myService.quests.on(ObservableArray.changeEvent, (args: any) => {
console.log(args.index);
//the item which was added
console.log(this.myService.quests.getItem(args.index));
//now you can cast it
let quest = <Quest>this.myService.quests.getItem(args.index);
console.log(args.action); // Action (In this case "add")
});
当我尝试添加测试对象时,我明白了。注意index属性。使用index
,您将获得新添加的属性。
this.myService.quests.push({ name: 'test1' });
this.myService.quests.push({ name: 'test2' });
这是输出:
JS: 0 //this is index
JS: {
JS: "name": "test1"
JS: }
JS: add //this is the action
JS: 1
JS: {
JS: "name": "test2"
JS: }
JS: add