2017-04-19 44 views
3

我想询问是否有可能将整个对象发送到所述反应形式在角2.我可以发送一个对象到反应形式吗?

这是我的形式:

this.parameterForm = this.fb.group({ 

    'name': ['', Validators.required], 
    'description': "", 
    'parameterType':'' 
}); 

第三属性(参数类型)应该是一个对象。 (名称和描述均仅是纯字符串

我对参数类型HTML是(formControlName用于映射它):

<label for="parameterType">Parameter Type</label> 
<select id="parameterType" class="form-control" formControlName="parameterType"> 
    <option *ngFor="let parameterType of parameterTypes" [value]="parameterType"> 
    {{parameterType.name}} 
    </option> 

</select> 

在选择的值是对象(在别处产生)。当提交表单,我想有参数类型对象的试图解析的形式到一个名为参数对象提交:

export class Parameter { 

    public id: number; 
    public name: string; 
    public description: string; 

    public parameterType? : ParameterType 
} 

但是,当我尝试在控制台读取结果,参数类型包含只是一个字符串“[Object object]”,这看起来像parameterType只是一个字符串,并在提交表单时,该对象转换为一个简单的字符串。

我提交的功能是这样的:

onSubmit({parameter}:{parameter: Parameter}) { 
    console.log(parameter); 
    } 

现在我只是做的话,那到参数类型IM发送的ID,并通过服务我得到的对象,但这种解决方案是不是很好。你知道我可以通过对象的形式吗?

谢谢

+0

试着安慰参数作为的console.log(JSON.stringify(参数));以确保参数是一个对象 – sainu

+0

stringify返回我这:{“名称”:“输入名称”,“描述”:“输入描述”,“parameterType”:“[对象对象]”}所以我认为它现在只是一个字符串。 – arfis

回答

5

我认为你需要使用[ngValue]而不是[value]。

2

您有几种选择:

比方说,我有以下形式:

user: FormGroup; 

this.user = this.formBuilder.group({ 
    account: this.formBuilder.group({ 
    email: ['', [Validators.required, Validators.pattern(EmailRegex)]], 
    password: ['', Validators.required], 
    passwordConfirm: ['', Validators.required] 
    }, { validator: this.matchingPasswords('password', 'passwordConfirm') }) 
}); 

从那里,你可以设置你的表单的值与Object

let user: SignUp = { 
    account: { 
    email: this.mail, 
    password: '', 
    passwordConfirm: '' 
    } 
}; 
this.user.setValue(user); 

在哪里Signup是一个接口:

export interface SignUp { 
    account: { 
    email: string; 
    password: string; 
    passwordConfirm: string; 
    } 
} 

您可以用这种方式创建表单新Object

let jsonResult = { 
    email: this.user.value.account.email, 
    password: this.user.value.account.password 
}; 

或使用该表单作为对象从一个接口(与@Output为例):

@Output() randomOutput= new EventEmitter<SignUp>(); 

let data: SignUp = Object.assign({}, this.user.value); 

this.randomOutput.emit(data); 
相关问题