2017-08-29 37 views
0

有一些博客已经发布了这个错误,但没有一个是为FormGroup规定,他们都给解决方案与FormArray嵌套FormGroup返回错误,而建设的角度应用在生产模式

我不得不做出一个嵌套FormGroup在角度4出于某种目的,当我在开发模式下使用该代码时,它不会显示任何问题并完美编译。但是,当我试图在生产模式下编译相同的代码时,它在“AbstractControl”类型中不存在“属性”控件引发错误。

component.ts:

import { Component, OnInit } from '@angular/core'; 
import { CustomerService } from '../../service/customer.service'; 
import { FormControl,FormGroup,FormBuilder,Validators,FormArray } from '@angular/forms'; 
enter code here 
@Component({ 
selector: 'app-customer', 
templateUrl: './customer.component.html', 
styleUrls: ['./customer.component.css'], 
providers: [CustomerService,GeolocationService] 
}) 
export class CustomerComponent implements OnInit { 
sheduleForm:FormGroup; 
constructor(private service:CustomerService,private geoLocation:GeolocationService,private router:Router,private fb: FormBuilder) { 
this.sheduleForm = fb.group({ 
user_schedule_details:fb.group({  
    mon:fb.group({ 
     schedule_time:['00:00:00'], 
     status:[false] 
    }), 
    tue:fb.group({ 
     schedule_time:['00:00:00'], 
     status:[false] 
    }), 
    wed:fb.group({ 
     schedule_time:['00:00:00'], 
     status:[false] 
    }), 
    thu:fb.group({ 
     schedule_time:['00:00:00'], 
     status:[false] 
    }), 
    fri:fb.group({ 
     schedule_time:['00:00:00'], 
     status:[false] 
    }), 
    sat:fb.group({ 
     schedule_time:['00:00:00'], 
     status:[false] 
    }), 
    sun:fb.group({ 
     schedule_time:['00:00:00'], 
     status:[false] 
    }) 
    }),  
    time_zone: [d.getTimezoneOffset()], 
    time_format : [false], 
    city:[null], 
    state:[null], 
}); 
} 

component.html:

<form [formGroup]="sheduleForm" (ngSubmit)="saveShedule(sheduleForm.value)" novalidate> 
<div class="schedule_time">Schedule Time: 
      <span> 
      <md-input-container> 
       <input type="time" mdInput [formControl]="sheduleForm.controls['user_schedule_details'].controls['mon'].controls['schedule_time']"> 
      </md-input-container> 
      </span> 
     </div> 
     </div> 
...... so on..... 

所以我得到的问题在这个网站与[formControl] =“sheduleForm.controls [ 'user_schedule_details']。controls ['mon']。controls ['schedule_time']“ 任何人都可以帮助我。我知道这个表单控制名称看起来很奇怪。但只有这样我才能够访问表单值。如果这不是使用formControl的正确方法,请告诉我,我可以使用什么呢?

回答

0

尝试调整你的HTML类似:

<form [formGroup]="sheduleForm" 
     (ngSubmit)="saveShedule(sheduleForm.value)" 
     novalidate> 
    <div formGroupName="user_schedule_details"> 
    <div formGroupName="mon"> 
     <div class="schedule_time">Schedule Time: 
     <span> 
      <md-input-container> 
      <input type="time" 
        mdInput 
        formControlName="schedule_time"/> 
      </md-input-container> 
     </span> 
     </div> 
    </div> 
    ...... so on..... 

另外,如果你想使用[formControl]无论如何,你可以使用get()功能做到这一点:

<md-input-container> 
    <input type="time" 
     mdInput 
     [formControl]="sheduleForm.get('user_schedule_details.mon.schedule_time)"/> 
</md-input-container> 

甚至

[formControl]="sheduleForm.get('user_schedule_details').get('mon').get('schedule_time')" 
+0

非常感谢。这解决了问题。第一个没有工作,但第二个解决方案工作。[formControl] =“sheduleForm.get('user_schedule_details')。get('mon')。get('schedule_time')”“ –