从角度 8 升级到角度 9 后无法读取未定义的 属性 'createComponent'

Cannot read property 'createComponent' of undefined after upgrade from angular8 to angular9

将 angular7 应用程序升级到 angular9 后出现错误。

首先我已经更新到 angular8 然后进行 9 upgrade.Its 编译但是在 运行 应用程序之后我收到了错误。

无法读取未定义的 属性'createComponent'

TypeError: Cannot read property 'createComponent' of undefined
    at UIView._applyUpdatedConfig (webpack-internal:///./node_modules/@uirouter/angular/lib/directives/uiView.js:269)
    at UIView._viewConfigUpdated (webpack-internal:///./node_modules/@uirouter/angular/lib/directives/uiView.js:255)
    at configureUIView (webpack-internal:///./node_modules/@uirouter/core/lib-esm/view/view.js:156)
    at Array.forEach (<anonymous>)
    at ViewService.sync (webpack-internal:///./node_modules/@uirouter/core/lib-esm/view/view.js:164)
    at ViewService.registerUIView (webpack-internal:///./node_modules/@uirouter/core/lib-esm/view/view.js:191)
    at UIView.ngOnInit (webpack-internal:///./node_modules/@uirouter/angular/lib/directives/uiView.js:131)
    at checkAndUpdateDirectiveInline (webpack-internal:///./node_modules/@angular/core/fesm5/core.js:22505)
    at checkAndUpdateNodeInline (webpack-internal:///./node_modules/@angular/core/fesm5/core.js:31069)
    at checkAndUpdateNode (webpack-internal:///./node_modules/@angular/core/fesm5/core.js:31031)

组件

@Component({
    selector: 'login-component',
    templateUrl: './login.component.html',
    styleUrls: ['./login.component.less'],
    animations: [
        trigger('slideInAnimation', [
            transition(':enter', [
                style({ transform: 'translateX(100%)' }),
                animate(
                    '1s ease-in-out',
                    style({ transform: 'translateX(0%)' })
                )
            ]),
            transition(':leave', [
                style({ transform: 'translateX(0%)' }),
                animate(
                    '1s ease-in-out',
                    style({ transform: 'translateX(100%)' })
                )
            ])
        ])
    ]
})
export class LoginComponent implements OnInit, AfterViewInit, OnDestroy {
    
    @ViewChild('uname', { static: true }) uname: any;

    constructor(
        private loginService: LoginService,
        private store: Store<AppState>,
        private titleService: Title        
    ) {
       
    }

    ngOnInit() {
        
    }
    ngAfterViewInit() {
        if (this.uname !== undefined) {
            this.uname.nativeElement.focus();
        }
    }
        
}

因为这之前有效,所以问题似乎只是来自 NodeModules。

首先,从您的应用中删除文件夹:node_modulespackage-lock.json。您可以在计算机上的文件夹中或在文本编辑器中执行此操作。请注意,删除可能需要几分钟时间。这是正常的。

删除后,在文本编辑器中关闭并重新启动您的应用程序。然后,在您的终端中,键入 npm install。这也需要几分钟时间,但完成后您会注意到 node_modules 文件夹已返回。

使用 ng servenpm start 从此处尝试 运行 应用程序。

如果问题仍然存在,请告诉我。您更新 Angular.

时可能缺少步骤

我有一个非 cli 混合应用程序,所以我的升级是手动的。我遇到了同样的问题(Angular 8 到 9),但重新安装我的节点模块对我没有帮助。我最终再次开始升级过程。同样,我发现自己在使用 @ui-router 模块时遇到错误。这些帮助我修复了它们:

  1. 移动到@ui-router/angular-hybrid@10.0.0 - https://github.com/ui-router/angular-hybrid/issues/374
  2. 在您的项目中包含 @ui-router/core 或手动安装对等依赖项 - https://github.com/ui-router/angular-hybrid/releases/tag/10.0.0
  3. 确保@ui-路由器模块没有多个副本 - https://githubmemory.com/repo/ui-router/core/issues/671