2017-08-08 49 views
0

我有一個組件可以在加載時解析路由中的數據。如何訂閱已解析的路由數據的更改 - Angular 2

我的挑戰是,只要組件呈現的數據發生更改,組件不會更新,除非我刷新頁面,或切換到另一條路線並返回。

我知道這是因爲數據只有在訪問路由時纔得到解決。

有沒有解決這個問題的方法,以便我可以訂閱已解決數據的更改?

下面是相關的代碼塊。

routes.ts

{ 
    path: 'user-information', 
    component: UserInformationComponent, 
    resolve: { userData: UserDataResolver } 
} 

resolver.ts

@Injectable() 
export class UserDataResolver implements Resolve<any> { 

    constructor(
    private userService: UserService 
) {}; 

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<IUser> { 
    return this.userService.currentUser().first(); 
    }; 
}; 

user.component.ts只有

loadUserData() { 
    this.route.data.subscribe(
    data => this.userData = data, 
    error => this.updateForm.disable() 
); 
}; 

回答

0

解析器允許返回一個值或對象。你應該能夠在一個承諾(或其他可觀察)來包裝this.userService.currentUser()並返回:

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<IUser> { 
return Promise.resolve(this.userService.currentUser()); 
}; 

然後,您應該能夠「水化」你可觀察到在組件的代碼:

loadUserData() { 
    this.route.data 
    .mergeMap(data => userData) 
    .subscribe(
     userData => this.userData = userData, 
     error => this.updateForm.disable() 
    ); 
    }; 
} 

我無法馬上測試,但我相信這是有效的。