2017-05-20 5 views
1

설명 : 나는 현재 Angular2 (Angular4 지금 제 생각 엔) 사용하고다시로드 관찰 가능한 사용 Angular2

. 서비스 : this.policyService.getBaseCommission().subscribe(response => response)constructor에 구독하고 있습니다. 이 데이터는 동일한 페이지의 양식에서 업데이트 할 수 있습니다.

문제 : 내가 수동으로 페이지를 새로 고침 할 필요없이, 그 가입을 갱신 데이터를 다시로드하고 html에 표시 할 수 있도록하려면

. SO에 대한 몇 가지 대답은 RC의 솔루션에 대한 것입니다. 나는 4.0에있다. db에 레코드를 추가하고 이미 구독중인 데이터를 새로 고칠 수 있기를 원합니다.

질문 :

가 어떻게 페이지를 다시로드하지 않고 데이터를 새로 고칠 수 있어요? 구독으로 인해 다른 요청이 실행되고 그에 따라 Angular2을 업데이트 할 수 있습니까? 내가 지금까지 시도 무엇

:

이 작업을 수행하는 동안, 나는 다시 가입하고있어 많은 새로 고침에, 나는 새 구독 각 시간을 만들 수 있습니다 - 적어도 나는 그게 사실이라고 생각합니다. .. 나는 요 시작시 getBaseCommission를 호출 한 후 각 양식 업데이트에 전화를 원하는 알 수있는 바와 같이

constructor() { this.reloadData(); } 

reloadData() : void { 
    this.policyService.getBaseCommission().subscribe(response => response) 
} 

// this gets called from the form on the page and should reload data 
createPolicy() : void { 
    this.policyService.anotherServiceCall().subscribe(response => { 
     this.reloadData(); 
    }); 
} 
+0

새로 고침을 얻지는 못했지만 데이터를 다시로드하려고하지만 언제 사용 하시겠습니까? 일부 이벤트 또는 일부 시간 간격 이후 또는 언제? 그리고 왜? lpl 문제에 대한 자세한 설명 .. –

+0

인라인 형식 완료시'createPolicy'가 호출됩니다. @HimanshuBansal – Phil

+0

그건 그렇고, Angular 4는 실제로 package.json을 업데이트 한 것입니다. 그렇지 않은 경우 여전히 Angular 2입니다. – Muirik

답변

0

. 당신은 스트림으로 양식 업데이트를 모델링 할 수 있습니다 :

this.formUpdates 
    .switchMap(() => { 
    return this.policyService.anotherServiceCall(); 
    }) 
    .startWith('initial') 
    .switchMap((x) => { 
    return this.policyService.getBaseCommission(x); 
    }) 
    .subscribe((commission) => { 
    this.commission = commission; 
    }); 

주의 사용 :

formUpdates = new Subject<any>(); 

쓰기는 anotherServiceCall

this.formUpdates.next(); 

를 호출하고 그 후 수수료를 다시로드해야이 스트림에 startWith 폼을 업데이트하기 전에 커밋을 init에로드해야합니다.

작동 예제는 this plunker을 확인하십시오.

관련 문제