在Nativescript中获取对象形式ObservableArray

时间:2018-08-27 21:53:16

标签: angular typescript nativescript

我有一个服务类,其中包含一系列类似这样的任务:

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内部。但是我非常无法将其投射回我的对象​​。

我该如何实现?

谢谢

1 个答案:

答案 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