angularjs - Angular 从 1.6.6 升级到 6 时出现 $Injector 错误

标签 angularjs angular ng-upgrade angular-upgrade angular-hybrid

我使用 Webpack 4 从 Angular.Js 1.6.6 升级到 Angular 6:


    import 'core-js/es7/reflect';
    import 'zone.js';
    import 'reflect-metadata';
    import 'rxjs';
    import { NgModule } from '@angular/core';
    import { FormsModule } from '@angular/forms';
    import { Routes, RouterModule } from '@angular/router';
    import { BrowserModule } from '@angular/platform-browser';
    import { UpgradeModule, downgradeComponent, downgradeInjectable, setAngularJSGlobal } from '@angular/upgrade/static';
    import { module } from './app.module.ajs';
    import './config/routes';
    import AppComponent from './components/app/app';
    import Application from './directives/application/application';
    import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
    console.log('NgModule');
    const appRoutes: Routes = [
    ];
    @NgModule({
      declarations: [AppComponent, Application],
      entryComponents: [AppComponent],
      imports: [
        BrowserModule,
        FormsModule,
        RouterModule.forRoot(appRoutes),
        UpgradeModule
      ]
    })
    class AppModule {
      constructor(public upgrade: UpgradeModule) {
        console.log('AppModule constructor');
      }
      ngDoBootstrap() {
        console.log('AppModule ngDoBootstrap');
      }
    }
    console.log('setAngularJSGlobal ...');
    setAngularJSGlobal(window['angular']);
    console.log('setAngularJSGlobal!!!');
    import main = require('./main');
    console.log('Before bootstrapModule module.name: ', module.name);
    platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => {
      console.log('Hybrid mode: Angular + Angular.Js');
      module.directive('appRoot', downgradeComponent({ component: AppComponent }));
      const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;
      console.log('bootstrapModule: ', module.name);
      main['launchAngular']();
      upgrade.bootstrap(document.body, [module.name], { strictDi: true });
    });

创建了自定义别名,向 tsconfig 添加了正确的路径,Webpack 构建通过并生成输出,但是当应用程序在浏览器中启动时,控制台中弹出错误:ngRoute is missing or incorrect ng module components 哪些操作不正确以及如何解决此错误?

最佳答案

修复了一些 Webpack 别名。替换:使用 Axios 的 Angular-Resource,使用 UI-Router/Angular-Hybrid 的 Angular-Route,重构耦合 Controller 到组件/指令和服务,摆脱 $rootScope & Magic 发生:升级开始工作。

关于angularjs - Angular 从 1.6.6 升级到 6 时出现 $Injector 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52118565/

相关文章:

Angular 2 Http 删除在正文中发送 json

javascript - 将输入值存储在 ionic Angular 为 5 的数组中

angularjs - 生产应用程序/网站中的 ngUpgrade?

angular - 意外的 token 导出 - Angular 2

javascript - AngularJS ng-if 有一个奇怪的延迟

javascript - 带有 Webpack 的 ngLocale

javascript - 来自服务器或客户端的 HTTP 请求 - 最佳性能?

javascript - Angular 中的 JSON 数据

javascript - AngularJS 应用程序中的代码重复

angularjs - 同时运行 Angular 和 AngularJS 框架