The 记录在案 https://github.com/angular/angular-cli/wiki/stories-configure-hmr使用 Angular 5 应用程序配置 HMR 的方法不适用于混合 Angular 5/1.x 应用程序。
核心问题是module.hot.accept
处理程序(定义于@角类/hmr https://github.com/gdi2290/angular-hmr) 尝试重新初始化根上的组件ApplicationRef
,但在混合应用程序中,Angular 5 根上没有组件(因为顶级组件是 AngularJS 1.x 组件)。
如果有一种方法可以枚举应用程序中的 Angular 5 组件,那么重新加载逻辑似乎可能会起作用,但我没有看到任何方法可以做到这一点。
有什么建议么?
如果您遵循downgradeModule
战略,这是可能的。性能升级 https://angular.io/guide/upgrade-performance
基本上可以遵循本指南 https://github.com/angular/angular-cli/wiki/stories-configure-hmr启用 HMR,除了创建hmr.ts
和操纵main.ts
,因为你不使用它downgradeModule
战略。
更多您在中激活 hmrAngularJs主模块如下:
// import all libs you need to boot
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {downgradeModule} from '@angular/upgrade/static';
import {MyAngularSevenModule} from "./my-angular-seven.module";
import {environment} from './environments/environment';
import {enableProdMode} from '@angular/core';
// important!: rename angular.module to not conflict with global `module`
import {module as angularModule, element, bootstrap} from 'angular';
// check if in prod mode
if(environment.production) {
enableProdMode();
}
// bootstrap you new Angular 7 main module
const bootstrapFn = (extraProviders) => {
const platformRef = platformBrowserDynamic(extraProviders);
return platformRef.bootstrapModule(MyAngularSevenModule);
};
const downgradedModule = downgradeModule(bootstrapFn);
// check if hmr should be enables and accept it if possible
if(environment.hmr) {
if(module && module.hot) {
module.hot.accept();
}
}
// construct your AngularJs module
const ngModule = angularModule("app", []);
// important!: manually bootstrap AngularJs
element(() => {
try {
bootstrap(document, ['app']);
} catch(error) {
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)