typescript - Angular 2 在实例化子组件之前解析根组件

标签 typescript routes angular components resolve

当我刷新我的网络应用程序时,我希望它在实例化任何组件或路由之前请求潜在登录用户的数据。 如果找到了用户的数据,我想将其注入(inject)到我所有其他子组件都依赖的服务中。

场景:假设我有 3 个组件,应用程序 (ROOT)、主页和关于。 如果我将这段代码放在我的 About 组件中,我希望它在实例化之前等待 20 秒,相反,组件会立即实例化,只有当我离开这个组件时,它才会触发该功能,我等待 20 秒才能到达主页。

routerOnActivate(next: ComponentInstruction, prev: ComponentInstruction) {
    return new Promise((res, rej) => {
        setTimeout(function () {
            res(true);
        }, 20000)
    })
}

理想情况下,我不希望解析连接到任何路由,我希望在实例化任何路由之前在根组件中请求解析。

最佳答案

实际上有两种方法可以做到。

1) 您可以扩展 Router-Outlet 类,对于每个事件组件,您可以等待 20 秒并轻松处理 singedIn 用户数据(两者都可以在单个文件或单个位置处理) .

2) 或者在单个组件中,您可以使用 @CanActivate 钩子(Hook)并等待 20 秒,当组件被激活时,您可以将 shareService(可能包含用户信息对象)注入(inject)构造函数并做进一步的事情.

为此,您可以在组件中使用 @CanActivate 并在它启动之前等待 20 秒。

If I place this code in my About component, I expect it to wait 20seconds before it instantiate, instead, the component gets instantiated instantly...

@CanActivate((next: ComponentInstruction, previous: ComponentInstruction) => {
   return new Promise((res, rej) => {
        setTimeout(function () {
            res(true);
        }, 20000)
    })
})

关于typescript - Angular 2 在实例化子组件之前解析根组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36260780/

相关文章:

javascript - 如何使用 react typescript 在 Electron 中获取 Node 类型?

javascript - Angular Material 找不到列

javascript - Vue Router 总是重新加载浏览器 - 丢失 vuex-state

javascript - 无法从 Flow Router (Meteor) 上的 url 读取 slug

typescript - Angular 2调用setInterval()未定义服务形式依赖注入(inject)

typescript - 从字符串操作推断字符串文字类型

javascript - VSCode 中 JavaScript 文件内出现 TypeScript 错误

c# - 如何使用自定义路由模式访问 url?

angular - 在 Angular 2 中,使用发布和连接创建 Hot observable 时出现错误

html - Swiper slider SVG 图标有时不显示在 Angular Material svg 图标中