我有一个旧的 AngularJS 应用程序,我正在尝试使用 Angular 6 UpgradeModule 实现就地升级。我可以让所有代码执行——我正在通过 Angular 6 和 AngularJS 应用程序按预期注销状态。
问题是我完全无法将任何东西绑定到 DOM。
因此,在新 Angular 6 应用程序的核心 AppModule 中,所有文档和示例都使用 NgDoBootstrap:
this.upgrade.bootstrap(document.body, ['angularJS-app-name'], {strictDi: true});
我可以执行那个。我可以通过 UpgradeModule 看到我的 AngularJS 应用程序引导(通过 console.logs)。我可以看到我的 Angular 6 应用程序被引导(通过 console.logs)。但是没有任何东西与 DOM 绑定。
注销document
给了我我期望的 HTML 文档。我可以在 Chrome 控制台中手动检查它,并查看我期望的所有元素。但所有document
方法和属性似乎都返回 null。
document.body
: 无效的。
document.getElementById('an-elementId-I-can-see-when-logging-out-document')
: 无效的。
告诉我我只是在做一些愚蠢的事情,比如没有正确注入一些东西,因此 Angular/TS 的解释document
与 vanilla JS 的解释不同。
主应用程序.ts
import {APP_BASE_HREF} from "@angular/common";
import {Component, NgModule, Inject} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {UpgradeModule} from '@angular/upgrade/static';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {RouterModule, Routes, UrlHandlingStrategy} from '@angular/router';
@Component({
selector: 'ng6-router-root',
template: '<router-outlet></router-outlet><div class="ng-view"></div>'
})
export class Ng6RouterRoot{}
export class HybridUrlHandlingStrategy implements UrlHandlingStrategy {
shouldProcessUrl(url: any) {return false;}
extract(url:any) {return url;}
merge(url:any, whole:any) {return url;}
}
@NgModule({
declarations: [
Ng6RouterRoot
],
imports: [
BrowserModule,
UpgradeModule,
RouterModule.forRoot([])
],
providers: [
{ provide: UrlHandlingStrategy, useClass: HybridUrlHandlingStrategy },
{ provide: APP_BASE_HREF, useValue: '/' }
]
})
export class AppModule {
constructor (private upgrade: UpgradeModule) {
}
ngDoBootstrap() {
console.log('master.app.ts ngDoBootstrap start', document);
console.log('document.body', document.body);
this.upgrade.bootstrap(document.getElementById('master'), ['angularJsApp'], {strictDi: true});
console.log('master.app.ts bootstrap end');
}
}
platformBrowserDynamic().bootstrapModule(AppModule);
console.log('master.app.ts end readyState', document.readyState);
相关的html
<div id="master">
<ng6-router-root>
</ng6-router-root>
</div>