在Angular Universal中,由于在服务器端渲染(SSR)时没有浏览器环境,因此访问window对象会导致“window未定义”的错误。以下是解决此问题的一些方法:
import { isPlatformServer } from '@angular/common';
constructor(@Inject(PLATFORM_ID) private platformId: Object) {
if (isPlatformServer(this.platformId)) {
// 在服务器端运行时的逻辑
} else {
// 在浏览器端运行时的逻辑
}
}
import { Component, Inject, Optional } from '@angular/core';
import { WINDOW } from '@ng-web-apis/common';
constructor(@Optional() @Inject(WINDOW) private window: Window) {
if (this.window) {
// 在浏览器端运行时的逻辑
} else {
// 在服务器端运行时的逻辑
}
}
import { Component, OnInit, PLATFORM_ID, Inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
constructor(@Inject(PLATFORM_ID) private platformId: Object) { }
ngOnInit() {
if (isPlatformBrowser(this.platformId)) {
// 在浏览器端运行时的逻辑
} else {
// 在服务器端运行时的逻辑
}
}
通过上述方法,你可以根据运行环境在Angular Universal中解决“window未定义”的问题。