我有一个“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"
}
}
答案 0 :(得分:0)
首先,请注意,在您的Professional界面中,地址类型应从字符串更改为地址。现在,您需要初始化至少子对象,这样您就不会得到异常:
profesional: Profesional = <Profesional>{ 'address' : {} };
更好的选择是初始化所有属性,但这取决于域。
答案 1 :(得分:0)
无论您在哪里制作专业版,都必须包含地址实例化。所以:
profesional: Profesional = { address: {} };
请注意,您输入的地址也是错误的 - 它应该是接口类型,而不是字符串。鉴于您打算使用它的方式,您可能也想从其定义中删除问号。 (或者,不是所有这些,您可以用以下内容包含该输入:
<div *ngIf="professional.address">
...并在其他地方实例化地址。)