2016-12-22 3 views
1

Мне нужно восстановить компонент при изменении маршрутизатора, проблема в том, что я рисую в SVG-файл некоторые данные.Полностью компонент ретранслятора при изменении маршрутизатора

Некоторый код:

ngOnInit() { 
    const self = this; 
    this.route.params.subscribe(params => { 
     this.DiagnosticServerID = params['diagnosticServerID']; 
     this.ConnectionName = params['connectionName']; 

     jQuery('#svgobj')[0].addEventListener('load', function() { 
     _snap = Snap("#svgobj")); 
     self.registerCpuUsageControllerEvent(); 
     svgTooltip(_snap); 
     self.go(); 
    }); 
    }); 
    } 

Где проблема? Проблема в jQuery ('# svgobj') [0] .addEventListener, она работает только один раз, когда я использую этот компонент в первый раз.

Поэтому я должен полностью восстановить компонент при изменении маршрута.

Не спрашивайте, почему я использую JQuery здесь и некоторые странные код, это просто ДОУ и порт от Ember :)

Обновленный рабочий код:

svgObj: boolean = false; 
constructor(public api: ApiService, 
       private route: ActivatedRoute, 
       private router: Router, 
) { 
    this.route.params.subscribe(params => { 
     this.DiagnosticServerID = params['diagnosticServerID']; 
     this.ConnectionName = params['connectionName']; 
     if(this.svgObj){ 
     this.start(); 
     } 
    }); 
    } 

initSvg(){ 
    const self = this; 
    jQuery('#svgobj')[0].addEventListener('load', function() { 
     self.start(); 
    }); 
    } 

    start(){ 
    const self = this; 
    _snap = Snap("#svgobj"); 
    self.registerCpuUsageControllerEvent(); 
    svgTooltip(_snap); 
    self.go(); 
    } 

ответ

1

Переместить код из ngOnInit() чтобы initSvg() и вызвать initSvg() от ngOnInit() и подписаться на маршрут Params изменений и назвать его оттуда, а также:

constructor(activatedRoute:ActivatedRoute) { 
    activatedRoute.params.subscribe(val => this.initSvg()); 
} 
+0

Ну, если я вызываю initSvg из конструктора, есть ошибка, потому что пока нет #svgobj. – RaShe

+0

В этом случае вам нужно защититься от этого. 'if (this.svgobj) {this.initSvg(); } ' –

+1

У меня получилось, спасибо :) – RaShe

Смежные вопросы