2

У меня есть следующий распознаватель:Почему маршрутизатор не обновляет данные правильно в html-шаблоне в угловом 2?

@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; 
      } 
     }); 
    } 
} 

Компонент DashboardMapComponent, который содержит две подписки, один, чтобы загрузить пару GeoJSON файлов и другой кучу других JSon файлов, которые необходимы для применения:

ngOnInit(): void { 
    this.selectsSubscription = this.dashboardService.loadAllSelects().subscribe(() => this.selectsDataInit()); 
    this.mapSubscription  = this.service.loadGeoJson().subscribe(() => this.geoJsonInit().then(() => this.onMapsReady()).catch((error: Error) => console.log('map not properly loaded'))); 
} 

private selectsDataInit() { 
    this.selects = this.route.params.switchMap((params: Params) => { 
     this.selectedId = params[ 'id' ]; 
     return dashboardService.getAllSelects(); 
    }) 
} 

ngOnDestroy(): void { 
    this.selectsSubscription.unsubscribe(); 
    this.mapSubscription.unsubscribe(); 
} 

private geoJsonInit(): Promise<any> { 
    return dashboardMapService.getAllGeoJsonData().then((geoData: Array<Object>) => this.geoJsonData.push(...geoData)) 
           .then(() => this.navigateToDivision('dubai', 'city')) 
           .catch((error: Error) => console.log('failed to push geoJsonData')); 
} 

Обратите внимание, что onMapsReady рисует карты Google.

И DashboardDataComponent, который содержит следующее:

this.subscription = this.route.data.subscribe((d: { data: division }) => { 
      console.log(d.data); 
      this.selectedDistrict = d.data 
     }); 

Проблемы я столкнулся в том, что в HTML из DashboardDataComponent, название района я кокетливый, нажав на картах Google, что отображается первым время и больше не обновляется, когда я играю с картой (она должна обновляться до района, если я нажимаю на многоугольник), странно, что когда я регистрирую значения в компоненте B, он отображает правильные данные. Единственный способ сделать обновление HTML, чтобы переключаться между маршрутами и получить обратно к компоненту В.

Я перемещаться в 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 ниже карте:

enter image description here

This should update to dubai land when clicked (dubai should be replaced by dubai land

Это следует обновить до Дубайлэнд при нажатии (дубаи следует заменить Дубайлэнд) (рисунок выше). Проблема, опять же, в том, что он обновляет только ПОСЛЕ перехода на другой маршрут и обратно на приборную панель.

Кроме того, здесь мой маршрутизатор:

const dashboardCenterRoutes: Routes = [ { 
    path: '', 
    component: DashboardCenterComponent, 
    children: [ { 
     path: '', 
     component: DashboardMap, 
     children: [ 
      { 
       path: ':id', 
       component: DashboardDataComponent, resolve: { data: DashboardDataResolver } 
      } 
     ] 
    } ] 
} ]; 

ответ

1

Я помню, где-то идентичную проблему с картами, где обнаружение изменений не происходит по какой-то причине. Я не могу теперь найти этот вопрос в любом месте, хотя ...

Но вы могли бы попробовать это с разрешения NgZone

import { Component, OnInit, NgZone } from '@angular/core'; 

constructor(private ngZone: NgZone) {} 

И обернуть код, который не обновляет вид в:

this.ngZone.run(() => { ...your code here ...}) 
+0

СПАСИБО! вот ссылка: http://stackoverflow.com/questions/31352397/how-to-update-view-after-change-in-angular2-after-google-event-listener-fired – abedzantout

+0

Добро пожаловать, рад помочь! :) Да, это был бы вопрос, который я имел в виду :) – Alex