我在角度通用执行时遇到UI-Router挂钩之间的奇怪行为。
对于在UI-Router'中声明的钩子(即onEnter
,onExit
)。状态,它们在角度(在浏览器上)和角度通用上都按预期执行。
但是,例如在观看TransitionService
钩子的角度单件服务中,它们仅在角度(在浏览器上)触发;他们在角度普遍中被忽略了。
这是一个错误还是错过了什么?
我使用的单身人士服务:
@Injectable()
export class SingletonService {
constructor(transitionService: TransitionService) {
transitionService.onEnter({}, this.onEnterStateChange.bind(this));
}
private onEnterStateChange(transition: Transition, state?: StateDeclaration): void {
// something here
// ✓ called on browser
// ✗ ignored on universal
}
}
Lib版本:
答案 0 :(得分:0)
我们找到了问题的根源,它不是一个错误,而是对UIRouter在普遍环境中的互动的误解。
在服务器端渲染期间,组件渲染在ui-router完成路由之后完成,在最后删除。在我们的代码中,单例是在app-module中提供的,甚至为时已晚;挂钩太迟了。
关于这面旗帜:deferInitialRender: true
。
解决方案是注册并强制创建单例服务,方法是将其注入app-module的构造函数中。
希望这可以帮助别人。