You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 18使用angular-slickgrid时出现window is not defined错误求助

Angular 18 + angular-slickgrid 解决 window is not defined 错误

这个错误是**服务器端渲染(SSR)**场景下的典型问题——服务器环境里没有浏览器的window对象,但angular-slickgrid的TreeDataService等组件在初始化时直接访问了window,导致SSR构建或运行时报错。

下面是几种可行的解决方法:

方法1:关闭SSR(最简单)

如果你的项目不需要服务器端渲染,直接关闭即可:

  • 修改angular.json,删除项目配置里的architect > server节点;
  • 启动项目时用ng serve代替ng serve --ssr,构建时用ng build代替ng build --ssr。

方法2:保留SSR,仅在浏览器端渲染angular-slickgrid

让依赖window的组件只在浏览器环境加载,避免SSR过程中执行相关代码:

  1. 组件中判断环境并动态导入
    在使用angular-slickgrid的组件里,用isPlatformBrowser识别浏览器环境,动态导入库:
    import { Component, Inject, PLATFORM_ID } from '@angular/core';
    import { isPlatformBrowser } from '@angular/common';
    
    @Component({
      selector: 'app-task-list',
      templateUrl: './task-list.component.html'
    })
    export class TaskListComponent {
      isBrowser = false;
      gridOptions: any;
      columnDefinitions: any[] = [];
    
      constructor(@Inject(PLATFORM_ID) private platformId: Object) {
        this.isBrowser = isPlatformBrowser(this.platformId);
      }
    
      ngOnInit(): void {
        if (this.isBrowser) {
          // 动态导入angular-slickgrid,仅在浏览器端执行
          import('angular-slickgrid').then(() => {
            // 在这里初始化你的grid配置、列定义等逻辑
            this.columnDefinitions = [/* 你的列配置 */];
            this.gridOptions = { /* 你的grid配置 */ };
          });
        }
      }
    }
    
  2. 模板中条件渲染组件
    在组件模板里用*ngIf控制,只有在浏览器环境才渲染angular-slickgrid:
    <ng-container *ngIf="isBrowser">
      <angular-slickgrid 
        [gridOptions]="gridOptions" 
        [columnDefinitions]="columnDefinitions"
      ></angular-slickgrid>
    </ng-container>
    

方法3:临时模拟window对象(不推荐)

如果需要快速应急,可以在server.ts里给服务器环境模拟一个空的window对象,但这种方法可能引发其他兼容性问题,仅作临时方案:

// 在server.ts的顶部添加
globalThis.window = {} as Window;
globalThis.document = { createElement: () => ({}) } as Document;

内容的提问来源于stack exchange,提问作者Deva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:57:40