繁体   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