2017-01-24 9 views
0

ngOnInit()에서 가입 할 너무 많은 관찰 가능한 :각도이 명 나는 그것이 예를 들어, 필드가 서로의 행동에 영향을 미칠 수의 거대한 모델 기반 양식을 가지고

만약 필드 A를 변경, 필드 B의 값의 값 서버로부터 취득하는지, 필드 C 변화 값은, 필드 D는

I은 ​​valueChanges 사용 변경 검출하기 위해 등 &을 해제 할 필요가있는 경우 :

this.form.controls['a'].valueChanges.subscribe(data=>{ 
    //do some staff 
}); 
this.form.controls['b'].valueChanges.subscribe(data=>{ 
    //do some staff 
}); 
. 
. 
. 

(즉 참고 내 양식에 약 50 개의 필드가 있기 때문에 this.form.valueChanges라고 말할 수는 없습니다.) 모든게 괜찮아 보이지만이 접근법은 내 ngOnInit()을 조금 지저분하게 만듭니다. 내 질문입니다 :

ngOnInit에서 너무 많은 관찰 정보를 구독해도 문제가되지 않습니다. 코드를 어떻게 개선합니까?

답변

1

템플릿에 각도 event binding을 사용하면 더 깨끗합니다. 양방향 데이터 바인딩을 위해 ngModel과 결합하면 구성 요소 코드를 훨씬 더 명확하게 만들 수 있습니다. 예를 들어

: 당신은 change 같은 DOM 이벤트 Angular2에 event binding을 할 수

<input type="text" formControlName="a" [(ngModel)]="inputValue" (change)="doSomething($event)"> 

, click, keyup, blur

편집 등 :

  • change가 시작됩니다 입력 텍스트 상자 바깥 쪽을 클릭 할 때만 가능합니다.
  • keyupchange에 비해 더 나은 옵션입니다.

차이점을 비교하려면 Plunk을 참조하십시오.

+0

(변경)을 사용하면 여기를 보시기 바랍니다 : http://stackoverflow.com/a/34616143/4221872 –

+1

사실'change' 이벤트는'blur'에서만 발생합니다. 입력 할 때 이벤트가 시작되도록하려면'keyup '을 사용할 수 있습니다.'keyup'과'valueChanges.subscribe' 사이의 지연은 무시할 수 있습니다. 나는 이것을 확인하기 위해 [Plunk] (http://plnkr.co/edit/1glzZEvFmO08IUwTIbAQ?p=preview)를 작성했습니다. [http://plnkr.co/edit/1glzZEvFmO08IUwTIbAQ?p=preview](http://plnkr.co/edit/1glzZEvFmO08IUwTIbAQ?p=preview) –

+0

위 내 응답을 편집했습니다. –