我正在使用角度2.0决赛.我正在尝试更改主app.component.html中路由器插座的位置.模板正在更新精细显示,除了,我第一次使用router.navigate组件将不会显示在新的路由器插座中,并且没有错误.第二次和每次使用router.navigate后它都能正常工作.
app.component.html的示例模板
<div *ngIf="authenticated() == false">
<h1>not logged in</h1>
<router-outlet>
</router-outlet>
</div>
<div *ngIf="authenticated()">
<h1>logged in</h1>
<router-outlet>
</router-outlet>
</div>
Run Code Online (Sandbox Code Playgroud) 只是一个关于两个 Lifecycle HooksOnInit
和 的一般问题OnDestroy
。正如本文提到的,我一直假设OnInit
始终 在.OnDestroy
我有一个例子,ngOnDestroy()
我正在停止播放背景音乐。该声音已加载组件的ngOnInit()
,并且由于ngOnDestroy()
正在运行而未ngOnInit()
运行声音对象undefined
。
代码
ngOnInit() {
...
this.loadSounds();
...
}
ngOnDestroy() {
if (AppSettings.SOUNDS_ENABLED) {
this.soundService.getSound(Sound.MINI_GAME_BG_MUSIC).fade(0.2, 0, 1500);
}
}
private loadSounds() {
this.soundService.loadSound(Sound.MINI_GAME_BG_MUSIC, SoundPathURL.MINI_GAME_BG_MUSIC, true, 0);
}
Run Code Online (Sandbox Code Playgroud)
目前,当ngOnDestroy
尝试发出.fade()
的声音时,代码失败undefined
。undefined
当然,我可以通过在执行函数之前检查声音是否存在来轻松解决此问题.fade()
。我的假设是,如果ngOnDestroy()
运行了,ngOnInit()
那么也必须运行 - 我想我错了。
现在,由于这种情况,我认为在ngOnDestroy()
我的应用程序中的每个应用程序中,我应该在执行任何操作之前检查正在使用的对象是否是undefined
。因此,例如,在取消订阅之前,我应该检查订阅是否为undefined
,等等。
我这样的假设正确吗?