2016-12-22 5 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であり、このコンポーネントを初めて使用するときには1回しか動作しません。

私はルート変更時にコンポーネントを完全に再登録するつもりです。

は、私がここにjQueryといくつかの奇妙なコードを使用する理由

は聞かないでください 、それはエンバーからわずかPOCとポートです:)

更新作業コード:

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()ngOnInit()からinitSvg()を呼び出して、ルートのparamsの変更をサブスクライブし、同様にそこからそれを呼び出す:

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

さて、コンストラクタからinitSvgを呼び出すと、まだ#svgobjが存在しないため、エラーが発生します。 – RaShe

+0

その場合、あなたはそれを守る必要があります。 'if(this.svgobj){this.initSvg(); } ' –

+1

私はポイント、感謝を得た:) – RaShe

関連する問題