为什么路由器没有在angular 2中正确更新html模板中的数据?
我有以下解析器:为什么路由器没有在angular 2中正确更新html模板中的数据?,angular,angular2-routing,observable,angular2-template,angular2-services,Angular,Angular2 Routing,Observable,Angular2 Template,Angular2 Services,我有以下解析器: @Injectable() export class DashboardDataResolver implements Resolve<division> { constructor( private service: dashboardService, private router: Router ) {} resolve( route: ActivatedRouteSnapshot, state: RouterStateSnapshot ):
@Injectable()
export class DashboardDataResolver implements Resolve<division> {
constructor( private service: dashboardService, private router: Router ) {}
resolve( route: ActivatedRouteSnapshot, state: RouterStateSnapshot ): Observable<division> | Promise<division> | any {
console.log(route.params);
let id = route.params[ 'id' ];
let divisionType = route.params[ 'divisionType' ];
return this.service.getDivisionData(id, divisionType).then(data => {
if ( data ) return data;
else {
this.router.navigate([ '/dashboard' ]).then(() => 'success');
return null;
}
});
}
}
我面临的问题是,在DashboardDataComponent的html中,我通过单击google maps获取的地区名称第一次显示出来,并且在我玩地图时不再更新(如果我单击多边形,它应该会更新到该地区),奇怪的是,当我在组件B中记录值时,它显示所获取的正确数据。进行html更新的唯一方法是在路由之间切换并返回组件B
我使用以下语法在dashboardMapComponent中导航:
private navigateToDivision( divisionId: string, divisionType: string ): void {
if ( divisionId ) {
this.selectedId = divisionId;
this.router.navigate([ divisionId, { divisionType: divisionType } ], { relativeTo: this.route }).then(() => 'successfully loaded selects');
}
}
我怎样才能解决这个问题
请注意地图下方的html:
点击后应更新至迪拜土地(迪拜应替换为迪拜土地)(上图)。问题是,它只在切换到其他路线并返回仪表板后才会更新。
此外,这是我的路由器:
const dashboardCenterRoutes: Routes = [ {
path: '',
component: DashboardCenterComponent,
children: [ {
path: '',
component: DashboardMap,
children: [
{
path: ':id',
component: DashboardDataComponent, resolve: { data: DashboardDataResolver }
}
]
} ]
} ];
我记得在某个地方看到了与地图相同的问题,由于某种原因,变化检测没有发生。我现在在任何地方都找不到这个问题 但您可以尝试使用
import { Component, OnInit, NgZone } from '@angular/core';
constructor(private ngZone: NgZone) {}
并将不更新视图的代码包装到:
this.ngZone.run(() => { ...your code here ...})
非常感谢。这是推荐信:不客气,乐意帮忙!:)是的,这就是我的意思:)
import { Component, OnInit, NgZone } from '@angular/core';
constructor(private ngZone: NgZone) {}
this.ngZone.run(() => { ...your code here ...})