簡體   English   中英

如何在 angular 7 中使用窗口對象

[英]How to use window object in angular 7

我想使用 window 對象的 scrollTo() 函數。 直接通過訪問window.scrollTo(0,0),我可以實現這個功能。 當我在 angular 中搜索有關使用 window 的信息時,人們正在創建一個如下所示的提供程序:

import {InjectionToken, FactoryProvider} from '@angular/core';

export const WINDOW = new InjectionToken<Window>('window');

const windowProvider: FactoryProvider = {
  provide: WINDOW,
  useFactory: () => window,
};

export const WINDOW_PROVIDERS = [windowProvider];

內部服務使用如下代碼:

import {Injectable, Inject} from '@angular/core';
import {WINDOW} from './window.provider';

@Injectable({
  providedIn: 'root',
})
export class WindowService {
  constructor(@Inject(WINDOW) public window: Window) {}
}

模塊內

    {provide: WINDOW_PROVIDERS, useValue: window},

一切都適用於上述代碼,但在運行測試用例時,我收到以下錯誤。 幾乎一半的應用程序測試用例因以下錯誤而失敗

NullInjectorError: No provider for InjectionToken window!

window.service 的默認測試用例

import { TestBed } from '@angular/core/testing';

import { WindowService } from './window.service';

describe('WindowService', () => {
  beforeEach(() => TestBed.configureTestingModule({}));

  it('should be created', () => {
    const service: WindowService = TestBed.get(WindowService);
    expect(service).toBeTruthy();
  });
});

如何解決這個問題??

您需要設置以下configureTestingModule

TestBed.configureTestingModule({
    providers: [WINDOW_PROVIDERS, WindowService]
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM