How to use RxJs distinctUntilChanged?과 this을 보면, distinctUntilChanged
은 출력 스트림이 개의 연속적인 값만을 제공하는 것으로 보입니다.FormControl.detectchanges - distinctUntilChanged를 사용하는 이유는 무엇입니까?
동일한 값이 연속적으로 연속적으로 도착하면 본질적으로 스트림을 필터링하고 반복되는 값을 한 번만 가져 오는 것을 의미합니다.
그래서 내가 작성하는 경우이 : 나는 폼 입력에 valueChanges
에 가입 할 때 몇 군데가 distinctUntilChanged
를 사용하는 것이 좋습니다 본 적이
this.myFormControl.valueChanges
.debounceTime(1000)
.subscribe(newValue => {
console.log('debounced: ', newValue);
});
:이 출력에 차이를 볼
this.myFormControl.valueChanges
.debounceTime(1000)
.distinctUntilChanged()
.subscribe(newValue => {
console.log('debounced: ', newValue);
});
-하지만 실제로 이유는 모르겠다.
입력입니다. 사용자가 입력하는 경우 항상 변경됩니다. 맞습니까? 값은 항상 별개이므로 추가 작업을 이유없이 필터 입력에 추가하는 것입니다.
여기에 뭔가가 있습니까?
편집
내 첫 번째 코드 샘플에 따라 distinctUntilChanged
을 사용하여, 나는 값 Mr Trump
으로 양식 입력을 생성하고이 모델에 저장된 보장.
그런 다음 컨트롤을 클릭하고 Mr Trump
을 붙여 넣었습니다. 값이 같기 때문에 기록 된 내용이 표시되지 않을 것으로 예상 했었습니다. 컨트롤에 이전과 동일한 값이 있으므로 확실하게 distinctUntilChanged
에서 무시해야합니다.
2
더 내 테스트에보고 한 후,이 문제는 내가 AbstractControls
의 배열을 사용하기 때문에 것으로 보인다 편집 : 조금 이상한하지만
this.itemsControl = <FormArray>this.form.controls['items'];
...
this.itemsControl.controls[index].valueChanges...
그래서 여전히 때 화재 것을을 값이 같으면 배열 항목 자체가 아니라이 배열 항목 (양식 그룹) 내부의 실제 입력에 valueChanges
에 연결할 필요가 있다고 추측합니다.
EDIT
그래서 3 (예상) valueChanges
발생하지 않는 이미 입력 제어에 존재하는 동일한 값을 붙여, 이하에 EDIT 2 코드를 변경 한 후.
let fg = this.itemsControl.controls[index]; // get the formGroup
fg['controls'].content.valueChanges
.debounceTime(1000)
.distinctUntilChanged()
.subscribe(newValue => {...});
헥타르 아, 가지입니다 명백한 지금 당신은 그것을 밖으로 지적한다, 이렇게 시간을내어 주셔서 감사합니다! :) – rmcsharry