实例化子对象(对象内部对象)Angular 2

时间:2016-08-28 20:16:57

标签: javascript json angular typescript

我有一个“Profesional”模型,其属性是另一个模型“地址”:

   'use strict';
import * as Address from './models/address';

export interface Profesional {
    id?: number;

    name?: string;

    address?: Address;
}

和另一个模型:

    'use strict';

export interface Adress{

    id?: number;

    name?: string;
}

我遇到的问题是使用Profesionals实例的组件:

    <input type="text" [(ngModel)]="profesional.name">

    <input [(ngModel)]="profesional.address.id" class="form-control">

当我从dada基地获得一个profesional实例,保存在名为profesional的变量中时,属性名称设置为来自对象的值。但地址给了我一个错误:

EXCEPTION:错误:未捕获(在承诺中):EXCEPTION:./CreateProfetional类中的错误CreateProfetional - 内联模板:48:59原始异常:TypeError:无法读取未定义的属性“id” ts只有获得专业实例的方法:

import { Component, OnInit  } from '@angular/core';
import { DefaultApi } from '../../../api/api/DefaultApi';
import {Profesional} from '../../../api/model/Profetional';
import {Address} from '../../../api/model/Address';
declare var $: any;
@Component({
  selector: 'profesionales',
  styles: [require('./profesionales.component.css').toString()],
  template: require('./profesionales.component.html'),
  providers: [DefaultApi]
})
export class CrearEditarProfesionalesComponent {
  profesional: Profesional = {};

  ngOnInit() {
        this.onGet(1);  
  };

  onGet = (id: number) => {
    this._apiDentos.findProfesionalById(id.toString())
      .subscribe(res => {
        this.profesional = res
      },
      console.error);
  };

}

如何实例化作为对象的属性“profesional.adress”?它是可行的,或者我必须创建一个简单的变量,然后将属性值赋给它?这样做的正确方法是什么?

这是json:

{  
   "id":1,
   "name":"1",
   "address":{  
      "id":1,
      "name":"fsda"
   }
}

2 个答案:

答案 0 :(得分:0)

首先,请注意,在您的Professional界面中,地址类型应从字符串更改为地址。现在,您需要初始化至少子对象,这样您就不会得到异常:

profesional: Profesional = <Profesional>{ 'address' : {} };

更好的选择是初始化所有属性,但这取决于域。

答案 1 :(得分:0)

无论您在哪里制作专业版,都必须包含地址实例化。所以:

profesional: Profesional = { address: {} };

请注意,您输入的地址也是错误的 - 它应该是接口类型,而不是字符串。鉴于您打算使用它的方式,您可能也想从其定义中删除问号。 (或者,不是所有这些,您可以用以下内容包含该输入:

<div *ngIf="professional.address">

...并在其他地方实例化地址。)