JavascriptServices窗口未在服务器端预呈现中定义

时间:2018-02-27 05:05:22

标签: angular typescript asp.net-core components javascriptservices

我正在使用带有angular2 +的 javascriptservices 模板,我正在尝试找到一个解决方案,用于将库导入我的组件,尝试访问窗口。 Javascript服务使用服务器端预呈现,因此您无法将库导入到立即尝试访问窗口的组件中,而不会导致窗口未定义错误。

目前,我正在尝试将dat.gui添加到我的组件中,但我还没有找到解决方案。 https://www.npmjs.com/package/dat.gui

有没有人知道我可以在客户端上加载dat.gui库的方法,并将其传递给我的组件以避免窗口未定义错误将其导入组件?

由于服务器端预渲染,这将在添加到我的组件时始终抛出错误。

+ (int)maxProfit:(NSArray *)prices {
    int maxProfit = 0;

    int bestBuy = 0;
    int bestSell = 0;
    int currentBestBuy = 0;

    for (int i= 1; i < prices.count; i++) {
        int todayPrice = [prices[i] intValue];
        int bestBuyPrice = [prices[currentBestBuy] intValue];
        if (todayPrice < bestBuyPrice) {
            currentBestBuy = i;
            bestBuyPrice = todayPrice;
        }

        if (maxProfit < (todayPrice - bestBuyPrice)) {
            bestSell = i;
            bestBuy = currentBestBuy;
            maxProfit = (todayPrice - bestBuyPrice);
        }
    }

    NSLog(@"Buy Day : %d", bestBuy);
    NSLog(@"Sell Day : %d", bestSell);

    return maxProfit;
}

或者 从'dat.gui'导入*作为dat;

1 个答案:

答案 0 :(得分:0)

这是我用来确保浏览器使用窗口,文档,导航器,jQuery操作的方法。

  import {PLATFORM_ID} from '@angular/core'
  import {isPlatformBrowser } from '@angular/common'
    ....


    constructor(@Inject(PLATFORM_ID) private platformId: Object){}

    private isBrowser: boolean = isPlatformBrowser(this.platformId);

    ngAfterViewInit(){
      if (this.isBrowser) {
       const dat = require('dat.gui');
       const gui = new dat.GUI();
      }
    }