2016-02-29 50 views
2

我有調用此函數ngOnInit()中的組分不鏢調用angular2

class OtherComponent { 
    // ChromeCast receveiver event handler 
    onLoad() { 
    this.router.navigate(["/Video", { 'pageData': pageData}]); 
    } 
} 

要加載稱爲video_component.dart另一個鏢成分的app_component.dart。

import 'package:angular2/angular2.dart'; 
import 'package:angular2/common.dart'; 
import 'package:angular2/router.dart'; 
import 'dart:js'; 
import 'dart:html'; 


@Component(selector: 'video-container', templateUrl: '../../views/video_component.html', directives: const [NgFor]) 
class VideoComponent implements OnInit { 

    @Input() 
    ContentService contentService; 

    LoggerService log; 

    String progress; 

    RouteParams routeParams; 

    var pageData; 

    VideoComponent(@Inject(ContentService) this.contentService, @Inject(LoggerService) this.log, this.routeParams) { 
    log.info('constructor called'); // <== constructor is called 
    } 

    @override 
    ngOnInit() { 
    log.info('ngOnInit:Load video page with content Id'); 
    //not called 
    } 
} 

爲什麼不ngOnInit()不會被調用?

+1

'(@Inject(ContentService)'是多餘的,如果參數是一個類型的話,這個參數也適用於'this.someField'類型的參數,最後一句看起來不完整 –

+0

yes。 Future()「編譯器說'Undefined class Future' –

+0

什麼是'onLoad()'事件,它來自哪裏? –

回答

2

嘗試

NgZone zone; 
ParentComponent(this.zone); 

onLoad(event) { 
    zone.run(() => this.router.navigate(...) 
} 

我以爲爲父級是一個包含事件處理程序的onLoad(事件)的成分......和它的構造和使用像你和contentService的那樣LoggerService注入NgZone中的代碼你的問題。將ParentComponent更改爲您用於此組件的類的名稱。

來自ChromeCast的onLoad()似乎不能從Angular修補,因此不會在Angulars區域運行。現在,當從Angulars區域以外的代碼調用事件處理程序時,有些事情不再有效(例如,更改檢測)。

隨着zone.run(...)我們明確地將背景帶回到安格拉斯區域。