Angular Universal服务器端渲染避免 window is not defined错误消息

 更新时间:2023年07月27日 09:47:00   作者:JerryWang_汪子熙  
这篇文章主要介绍了Angular Universal服务器端渲染避免 window is not defined错误消息,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

尽管 Universal 项目的目标是能够在服务器上无缝呈现 Angular 应用程序,但开发人员还是应该考虑一些注意事项。

首先,服务器和浏览器环境之间存在明显差异。 在服务器上呈现时,您的应用程序处于 ephemeral 或者 Snapshot 状态。

应用程序完全呈现一次,返回生成的 HTML,其余应用程序状态在下一次呈现之前被销毁。

其次,服务器环境本质上不具有与浏览器相同的功能(并且具有一些浏览器同样不具有的功能)。 例如,服务器没有任何cookies 的概念。

固然开发人员可以 polyfill 来一定程度上规避这个问题,但是没有完美的解决方案。

另请注意 SSR 的目标:改进应用程序的初始渲染时间。 这意味着应避免或充分防范任何可能降低此初始渲染中应用程序速度的情况出现。

一些 启用 SSR 后的常见错误:

window is not defined

使用 Angular Universal 时最常见的问题之一是服务器环境中缺少浏览器全局变量。 这是因为 Universal 项目使用 domino 作为服务器 DOM 呈现引擎。 因此,服务器上不会存在或不支持某些功能。 这包括窗口和文档全局对象、cookie、某些 HTML 元素(如画布)和其他几个。 Domino 代表节点中的 DOM.

解决这个错误的一些思路

通常,需要的全局变量可以通过 Angular 平台通过依赖注入 (DI) 获得。

例如,全局文档可通过 DOCUMENT 令牌获得。 此外,通过 DOCUMENT 对象可以获得 window 和 location 的非常原始的版本。

例如:

示例代码如下:

import { Injectable, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
@Injectable()
export class ExampleService {
  constructor(@Inject(DOCUMENT) private _doc: Document) {}
  getWindow(): Window | null {
    return this._doc.defaultView;
  }
  getLocation(): Location {
    return this._doc.location;
  }
  createElement(tag: string): HTMLElement {
    return this._doc.createElement(tag);
  }
}

以上就是Angular Universal服务器端渲染避免 window is not defined错误消息的详细内容,更多关于Angular Universal服务器端渲染的资料请关注脚本之家其它相关文章!

相关文章

  • 浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)

    浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)

    今天小编就为大家分享一篇浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • AngularJS基础 ng-include 指令简单示例

    AngularJS基础 ng-include 指令简单示例

    本文主要介绍AngularJS ng-include 指令,这里对ng-include的基本知识做了整理,并附有代码实例,有需要的朋友可以参考下
    2016-08-08
  • AngularJS HTML DOM详解及示例代码

    AngularJS HTML DOM详解及示例代码

    本文主要介绍AngularJS HTML DOM基础知识,这里整理了相关资料和示例代码进行详解,有需要的小伙伴可以参考下
    2016-08-08
  • anime.js 实现带有描边动画效果的复选框(推荐)

    anime.js 实现带有描边动画效果的复选框(推荐)

    anime.js是一个灵活的轻型JavaScript动画库。这篇文章主要介绍了anime.js 实现带有描边动画效果的复选框 ,需要的朋友可以参考下
    2017-12-12
  • Angular 中的路由详解

    Angular 中的路由详解

    路由是实现单页面应用的一种方式,通过监听hash或者history的变化,渲染不同的组件,起到局部更新的作用,避免每次URL变化都向服务器请求数据,本文给大家介绍Angular 中的路由,感兴趣的朋友一起看看吧
    2023-11-11
  • Angular中的NgZone.run()有什么用途

    Angular中的NgZone.run()有什么用途

    在Angular中,NgZone是一个服务,用于管理异步任务的执行,并提供一种在Angular区域内或外部显式运行代码的方式,NgZone.run方法是一种显式在Angular区域内运行函数的方式,本文介绍Angular中的NgZone.run()有什么用,感兴趣的朋友一起看看吧
    2024-01-01
  • Angular4开发解决跨域问题详解

    Angular4开发解决跨域问题详解

    本篇文章主要介绍了Angular4开发解决跨域问题详解。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Angular4 组件通讯方法大全(推荐)

    Angular4 组件通讯方法大全(推荐)

    这篇文章主要介绍了Angular4 组件通讯方法大全(推荐),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • angular2+nodejs实现图片上传功能

    angular2+nodejs实现图片上传功能

    这篇文章主要介绍了angular2+nodejs实现图片上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Angular.js 实现带手柄自由调整页面大小的功能

    Angular.js 实现带手柄自由调整页面大小的功能

    这篇文章主要介绍了Angular.js 实现带手柄自由调整页面大小的功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12

最新评论