Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角通用状态转移初始值设定项_Angular_Angular Universal - Fatal编程技术网

Angular 角通用状态转移初始值设定项

Angular 角通用状态转移初始值设定项,angular,angular-universal,Angular,Angular Universal,如何正确使用本模块 删除文档并使用此模块后,状态转移将在浏览器中停止工作。使用本模块的正确方法是什么 p.S.已在@nguniversal中固定/common@7.1.0发布,公关 如果已激发DOMContentLoaded事件,并且在添加侦听器之后 对于DOMContentLoaded事件,它将不会执行 我们可以通过以下检查来检查文档是否已加载 if (doc.readyState === "complete" || doc.readyState === "interactive") {

如何正确使用本模块

删除文档并使用此模块后,状态转移将在浏览器中停止工作。使用本模块的正确方法是什么

p.S.已在@nguniversal中固定/common@7.1.0发布,公关

如果已激发
DOMContentLoaded
事件,并且在添加侦听器之后 对于
DOMContentLoaded
事件,它将不会执行

我们可以通过以下检查来检查文档是否已加载

if (doc.readyState === "complete" || doc.readyState === "interactive") {
    // document is ready
}
如果未激发
DOMContentLoaded
,则我们可以监听它

function handler() {
    // After DOMContentLoaded
}
document.addEventListener('DOMContentLoaded', handler);
因此,如果
DOMContentLoaded
已经启动,我们需要
resolve()
承诺。我修改了
StateTransferInitializerModule
模块代码,下面是代码

import { NgModule, APP_INITIALIZER } from '@angular/core';
import { DOCUMENT } from '@angular/common';

export function domContentLoadedFactory(doc: Document) {
  return () => new Promise ((resolve, _reject) => {
    const contentLoaded = () => {
      doc.removeEventListener('DOMContentLoaded', contentLoaded);
      resolve();
    };
    if (doc.readyState === "complete" || doc.readyState === "interactive") {
      // if DOMContentLoaded already fired
      // document is already ready to go
      resolve();
    }
    else{
      // if DOMContentLoaded is not fired then we are listening the event.
      doc.addEventListener('DOMContentLoaded', contentLoaded);
    }
  });
}


@NgModule({
  providers: [
    {provide: APP_INITIALIZER, multi: true, useFactory: domContentLoadedFactory, deps: [DOCUMENT]},
  ]
})
export class StateTransferInitializerModule {

}

作为参考,添加了代码。

这是一个很好的问题,我对Angular Universal提出了相同的答案,他们接受了,最近它被合并为Angular Universal。