在Angular 2+中,重定向到外部网址的唯一方法是使用window.location.href = '...';
。
How to redirect to an external URL in Angular2
但是,当Angular在SSR模式下运行时,会出现以下错误。
ERROR ReferenceError:窗口未定义
无论如何,我可以在服务器端呈现页面时避免此错误。
答案 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则重定向