代码之家  ›  专栏  ›  技术社区  ›  stefanvz

在Angular NativeScript中,错误消息是数组的第一个(不需要的)元素

  •  0
  • stefanvz  · 技术社区  · 6 年前

    刚用tns创建了一个tns项目,创建了myapp--ng,并需要文档中描述的httpmodule--gt;我从远程服务器的json中获取数据,一切正常。

    但是:

    出于某种原因,返回数组的第一个元素是以下对象,因此稍后会产生错误:

    JS: ==== object dump start ====
    JS: 0: {
    JS:   "__zone_symbol__state": null,
    JS:   "__zone_symbol__value": []
    JS: }
    JS: 1: {
    JS:   "id": 1,
    

    等等。

    我的服务如下(item.service.ts):

    import { Injectable } from "@angular/core";
    
    import { Item } from "./item";
    
    const httpModule = require("http");
    
    @Injectable()
    export class ItemService {
        private items = new Array<Item>(
            httpModule.request({
                url: "https://www.example.com/data.json",
                method: "GET"
            }).then((response) => {
                var obj = response.content.toJSON();
                for (let i=0; i<obj.length; i++) {
                    //console.log(obj[i]);
                    this.items.push(new Item(obj[i].id, obj[i].name, obj[i].role, obj[i].vereine, obj[i].testAufgaben));
                    //console.log("items object testaufgaben: "+this.items[i].testAufgaben)
                    console.dir(this.items);
                }
                //console.log(obj);
            }, (e) => {
                console.log(e);
            })
    
        );
    
        getItems(): Item[] {
            return this.items;
        }
    
        getItem(id: number): Item {
            return this.items.filter(item => item.id === id)[0];
        }
    }
    

    我导入的模型如下(item.ts):

    export class Slot {
        constructor(
            public slot: string,
            public fillIn: boolean
        ) {}
    }
    
    export class Aufgabe {
        constructor(
            public aufgabe: string,
            public aufgabeSlots: Array<Slot>
        ) {}
    }
    
    export class Item {
        constructor(
            public id: number, 
            public name: string, 
            public role: string, 
            public vereine: Array<string>, 
            public testAufgaben: Array<Aufgabe>
        ) {}
    }
    

    任何人都知道这个错误消息是什么,我能做些什么来避免它?

    提前多谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   bhavin jalodara    6 年前

    你路过了 Promise 创建时在构造函数中 new Array<type>() . 里面有什么东西 Array() as参数将添加到将创建的新数组中。这就是为什么你得到第一个元素而不是 item .

    尝试声明 items 首先从服务器请求数据,然后将其添加到数组中。

    import { Injectable } from "@angular/core";
    
    import { Item } from "./item";
    
    const httpModule = require("http");
    
    @Injectable()
    export class ItemService {
        private items = new Array<Item>()
    
        );
        constructor(){
            httpModule.request({
                url: "https://www.example.com/data.json",
                method: "GET"
            }).then((response) => {
                var obj = response.content.toJSON();
                for (let i=0; i<obj.length; i++) {
                    //console.log(obj[i]);
                    this.items.push(new Item(obj[i].id, obj[i].name, obj[i].role, obj[i].vereine, obj[i].testAufgaben));
                    //console.log("items object testaufgaben: "+this.items[i].testAufgaben)
                    console.dir(this.items);
                }
                //console.log(obj);
            }, (e) => {
                console.log(e);
            }
        }
        getItems(): Item[] {
            return this.items;
        }
    
        getItem(id: number): Item {
            return this.items.filter(item => item.id === id)[0];
        }
    }