UIRouter过渡钩未在角度通用中发射

时间:2018-02-22 09:59:23

标签: angular angular-ui-router angular-universal

我在角度通用执行时遇到UI-Router挂钩之间的奇怪行为。

对于在UI-Router'中声明的钩子(即onEnteronExit)。状态,它们在角度(在浏览器上)和角度通用上都按预期执行。

但是,例如在观看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版本:

  • angular + universal 5.2.6
  • ui-router angular 1.0.1

1 个答案:

答案 0 :(得分:0)

我们找到了问题的根源,它不是一个错误,而是对UIRouter在普遍环境中的互动的误解。

在服务器端渲染期间,组件渲染在ui-router完成路由之后完成,在最后删除。在我们的代码中,单例是在app-module中提供的,甚至为时已晚;挂钩太迟了。

关于这面旗帜:deferInitialRender: true

解决方案是注册并强制创建单例服务,方法是将其注入app-module的构造函数中。

希望这可以帮助别人。