在Angular SSR中重定向到外部URL

时间:2018-01-15 14:03:14

标签: angular serverside-rendering angular-universal

在Angular 2+中,重定向到外部网址的唯一方法是使用window.location.href = '...';

How to redirect to an external URL in Angular2

但是,当Angular在SSR模式下运行时,会出现以下错误。

  

ERROR ReferenceError:窗口未定义

无论如何,我可以在服务器端呈现页面时避免此错误。

1 个答案:

答案 0 :(得分:0)

您需要从服务器发送提供角度应用程序的对象,您将在角度代码中修改该对象

例如,在您的服务器代码中注入一个额外的参数,如果您需要重定向,它将在角度应用程序中进行修改。

 let respData = {redirectUrl: ''};
//....
 extraProviders: [
 {
    provide: 'httpResponseData',
    useValue: respData,
  }

在角度应用程序中,将该额外参数注入要指定重定向URL的组件/服务的构造函数中

constructor(@Inject(PLATFORM_ID) private platformId: Object, @Optional() @Inject('httpResponseData') private httpResponseData: any)
{
//...
}

如果要重定向,请使用新参数而不是窗口对象

redirect(url: string)
{
    if(isPlatformBrowser(this.platformId))
    {
         window.location.href = url;
    }
    else
    {
         this.httpResponseData.redirectUrl = url;
    }
}

最后,在您的Web服务器中,检查respData.redirectUrl属性的值,如果设置了url则重定向