从javascript模型中的现有属性返回undefined

时间:2017-10-20 13:28:13

标签: javascript angular typescript

我有一个明确定义的模型,用这种方式编写:

export class Navigation {
  line: {
    _id: string;
    code: string;
    name: string;
    isVia: boolean;
    _operator: {
      _id: string;
      name: string;
    };
    via: {
      _id: string;
      name: string;
    }
  };
  hour: string;
  destiny: string;
}

在某个页面上,我在构造函数之前从变量开始,然后我这样做:

public navigation: Navigation = new Navigation ();

我在constructor的下方:

this.navigation.destiny = 'center';
this.navigation.line.isVia = false;
this.navigation.line.via.name = 'No path to this line';

我可以访问hourdestiny属性但是示例行的属性不起作用。在我的控制台上出现以下错误:

  

错误错误:未捕获(承诺):TypeError:无法设置属性' isVia'未定义的   TypeError:无法设置属性' isVia'未定义的

我需要使用模型数据。

可以做什么以及如何安排?

ATTEMPTS

  1. 公共导航:导航= {};
  2. 公共导航:导航=新导航;
  3. 公共导航:导航;并在this.navigation = Navigation()构造函数中;
  4. 这两种情况都会出现同样的错误。

    SCENARIO

    我在ionic 2开发,基本上它适用于angular 4并使用typescript作为语言。当我在'离子4'中创建页面时它会在(.html.ts.scss.modeule.ts中生成文件,.ts文件会控制我的网页,其中我可以轻松操作所有html文件1}},向服务器发出请求并在运行时轻松更改屏幕。为了更好的开发,我使用models的概念来标准化我的内容,包括发送时的接收和接收,基于此,我收到/发送的所有内容都具有model的公式。该模型是一个单独的文件,以防我在我的页面的.ts中以其总体形式(即每个文件)表示我实例化我的模型,说我的navigation变量将采用我的模板Navigation的形式在我的构造函数添加了一个值之后不久,因为我告诉你在我的html中使用它。此刻我正在尝试在这个问题中表达的错误。

    为了重现错误,有必要使用complex model,也就是说它有对象对象,可以在我的观察中看到我有值root(destinyhour)和此对象中的line对象我有其他对象,我无法从line访问此对象,也无法访问其中的任何内容。

3 个答案:

答案 0 :(得分:1)

如果要设置任何行属性,则应首先在定义类中指定行属性。最初new Navigation() line属性为undefined之后。所以你必须在它上面设置一些东西。之后你可以使用line

的道具
export class Navigation {
  line: {
    _id: string;
    code: string;
    name: string;
    isVia: boolean;
    _operator: {
      _id: string;
      name: string;
    };
    via: {
     _id: string;
     name: string;
    }
  } = {via: {}, _operator: {}};
  hour: string;
  destiny: string;
}

var nav = new Navigation();
nav.line = {isVia = false, via: {...}};

答案 1 :(得分:1)

您的模型未初始化。将模型更改为:

export class Navigation {
  line:any= {
        _id: undefined,
        code: undefined,
        name: undefined,
        isVia: undefined,
        _operator: {
          _id: undefined,
          name: undefined,
        },
        via: {
          _id: undefined,
          name: undefined,
       }
  };
  hour: undefined;
  destiny: undefined;
}

答案 2 :(得分:1)

由于line是一个对象,当你构造undefined时它是Navigation,你必须像那样初始化它,然后将值放在isVia中:

this.navigation.destiny = 'center';
this.navigation.line = {}; 
this.navigation.line.isVia = false;
this.navigation.line.via = {}; 
this.navigation.line.via.name = 'No path to this line';

希望有所帮助