2017-03-03 4 views
3

안녕하세요, 저는 여기에 뭔가 잘못하고 있습니까? : patchValue가 정상적으로 작동하고 있습니다. 또한 전용 _ngZone 내() 메소드 .RUN 사용 ChangeDetectorRefAngular2 FormGroup View가 구독 중 업데이트되지 않습니다.

: 그러나 뷰의 입력 값을 업데이트 할 것이다 FormGroup은 ..

이미 수동 개인 REF를 이용하여 트리거링 시도 NgZone

HTML :

이 내 코드입니다

작동하지 않습니다

 <form [formGroup]="addressForm"> 
     <div class="row"> 
      <!--zip--> 
      <div class="form-group col-md-2"> 
       <label>Zipcode</label> 
       <input type="text" class="form-control" formControlName="ZipCode"> 
       <small [hidden]="addressForm.controls.zipcode.valid" class="text-danger"> 
     zip is invalid! 
       </small> 
      </div> 

      <!--city--> 
      <div class="form-group col-md-3"> 
       <label>City</label> 
       <input type="text" class="form-control" formControlName="City"> 
      </div> 

     </div> 
     <div class="row"> 

      <!--state--> 
      <div class="form-group col-md-3"> 
       <label>State</label> 
       <input type="text" class="form-control" formControlName="State"> 
      </div> 

     </div> 
     <div class="row"> 

      <!--street--> 
      <div class="form-group col-md-3"> 
       <label>Street</label> 
       <input type="text" class="form-control" formControlName="Street"> 
      </div> 

      <!--streetNumber--> 
      <div class="form-group col-md-2"> 
       <label>Number</label> 
       <input type="text" class="form-control" formControlName="StreetNumber"> 
      </div> 
     </div> 

주소 .Component

import { Observable } from 'rxjs/Observable'; 
import { AddressService } from './../service/address.service'; 
import { Address } from './../../../models/adresse.model'; 
import { NgZone, Component, Input, OnInit, ChangeDetectionStrategy,ChangeDetectorRef } from '@angular/core'; 
import { FormGroup, Form, FormBuilder, Validators, FormControl } from  
'@angular/forms'; 
import { Router, ActivatedRoute, Params } from '@angular/router'; 


@Component({ 
moduleId: module.id, 
selector: 'address-detail', 
templateUrl: 'address-detail.component.html', 
changeDetection: ChangeDetectionStrategy.Default 
}) 
export class AddressDetailComponent implements OnInit { 

@Input('group') 
public addressForm: FormGroup; 

constructor(private service: AddressService, private route: ActivatedRoute, private _fb: FormBuilder, private ref: ChangeDetectorRef, private _ngZone: NgZone) { 
} 

ngOnInit() { 

    this.addressForm = this._fb.group({ 
     ZipCode: ['', Validators.required], 
     City: [''], 
     State: [''], 
     Street: [''], 
     StreetNumber: ['', Validators.required] 
    }); 

    let id = this.route.snapshot.params['id'] + ""; 
    this.service.getAddressBy(id).subscribe((result) => { 

     this.addressForm.patchValue(result.Data); 
    }); 
} 

}

서비스 :

public getAddressBy(Id: string): 
Observable<TransferContainerModel<Address>> { 
    let url = AddressService.BASE_URL + 'GetAddressBy/'+Id; 

    return this.http.get(url) 
        .map((res:Response) => res.json()) 
        .catch((error:any) => 
Observable.throw(error.json().error || 'Server error')); 
} 

결과 데이터가 미세하고 구독 ENV 외부에서 예상대로 작동합니다. 힌트가 있습니까?

model: Address = new Address() //I suppose that you have a constructor for Address 

this.addressForm = this._fb.group({ 
     ZipCode: [this.model.zipCode, Validators.required], 
     City: [this.model.city], 
     State: [this.model.state], 
     Street: [this.model.street], 
     StreetNumber: [this.model.streetNumber, Validators.required] 
    }); 

이제 patchValue해야 작품 : 당신이 주소에 대한 모델을 가지고있는 것처럼

들으

답변

2

그건 그렇게 같은 것을 시도 할 것

this.service.getAddressBy(id).subscribe((result) => { 
     this.model = result.data 
     this.addressForm.patchValue(this.model); 
    }); 
+0

중대한 제안에 시간을 검색하는 이유 모델 세부 정보를 보낸 후 컨트롤이 업데이트되지 않고 세부 정보가 모델에 포함되었습니다. 도와 주셔서 감사합니다. – CodingRiot