在我的 angular 项目中启用 ivy 后,一切都会编译,但是在浏览器中启动应用程序时,我在应用程序引导期间收到以下错误:
Error: Cannot instantiate cyclic dependency! ApplicationRef
at throwCyclicDependencyError (core.js:5208)
at R3Injector.push../node_modules/@angular/core/__ivy_ngcc__/fesm5/core.js.R3Injector.hydrate (core.js:11763)
at R3Injector.push../node_modules/@angular/core/__ivy_ngcc__/fesm5/core.js.R3Injector.get (core.js:11590)
at injectInjectorOnly (core.js:648)
at ??inject (core.js:653)
at injectArgs (core.js:730)
at Object.factory (core.js:11858)
at R3Injector.push../node_modules/@angular/core/__ivy_ngcc__/fesm5/core.js.R3Injector.hydrate (core.js:11767)
at R3Injector.push../node_modules/@angular/core/__ivy_ngcc__/fesm5/core.js.R3Injector.get (core.js:11590)
at injectInjectorOnly (core.js:648)
Run Code Online (Sandbox Code Playgroud)
我正在努力找出循环依赖的位置以及为什么在不使用常春藤时它可以正常工作。我尝试使用 madge (madge --circular --extensions ts ./) 但没有找到循环依赖。
编辑:我已经手动浏览了所有服务并验证它们之间没有循环依赖
大家好,我在迁移后遇到 angular 问题,我已将项目从 angular 8 迁移到 angular 9 。ng server --prod 的角度在第 8 版中有效,但在第 9 版中出现错误。我已经检查过 ng build --prod 和 ng serve --prod。由于新的 angular 9 具有用于 AOT 编译的 IVY 编译器,因此我在 main.ts 中导入了 angular/compiler,而且引导程序正在注入 platformBrowserDynamic,因为我可以看到 angular 8/9 在开发模式下使用 jit 编译进行 ng serve,因此项目是在 jit 上运行,但由于 angular 使用 aot 编译进行生产,我的代码库出错
pollyfills.ts ` import '@angular/compiler'; 导入 '@angular/localize/init'; 导入 'core-js/es/array'; 导入 'zone.js/dist/zone';
`
**main.ts**
`
import '@angular/compiler';
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module'; …Run Code Online (Sandbox Code Playgroud) 我strictTemplates:true在 HTML 模板中设置并使用了以下内容
<textarea matInput matAutosizeMaxRows="4" matTextareaAutosize="true"
Run Code Online (Sandbox Code Playgroud)
我从编译器收到
error TS2322: Type 'string' is not assignable to type 'number'.
error TS2322: Type 'string' is not assignable to type 'boolean'.
Run Code Online (Sandbox Code Playgroud)
但是如何在 HTML 模板中正确设置它(以避免错误)?
在 Angular 8 中,我们可以这样做来获取所有已注册组件的列表:
//resolver is ComponentFactoryResolver
const factories = Array.from(this.resolver['_factories'].values());
//selector is used so that it will work in production build also
const factoryClass:any = factories.find((x: any) => x.selector === "SOME SELECTOR");
if(factoryClass && factoryClass.componentType != undefined){
console.log("Component found=>",factoryClass.componentType);
}
Run Code Online (Sandbox Code Playgroud)
在角度 9 中(使用 Ivy 时),this.resolver['_factories']未定义。
我需要所有组件的列表,包括从当前模块导入的模块组件。
这个问题之前已经在这个问题中问过:
如何从 Angular9 中的 ComponentFactoryResolver 访问 Angular7 中可用的 _factories 属性?
我们想将新的Angular 8 Ivy编译器与webpack一起使用。我们不使用Angular CLI。这可能吗?如何才能做到这一点?我似乎找不到有关此要求的信息。
更新到 Angular 9 / Ivy 编译器后出现错误
ERROR Error: Token InjectionToken XXXXXXXXX is missing a ?prov definition.
at injectableDefOrInjectorDefFactory (vendor.js:47105)
at providerToFactory (vendor.js:47210)
at resolveProvider$1 (vendor.js:56430)
Run Code Online (Sandbox Code Playgroud) 我一直在我的 Angular 项目中使用这个 Modal 模块,但是今天,当升级到 Angular 16 时,它停止工作并出现以下错误:
“SimpleModalModule”似乎不是 NgModule 类。
simple-modal.module.d.ts(5, 54):这可能意味着声明 SimpleModalModule 的库与 Angular Ivy 不兼容。检查该库是否有新版本可用,如果有则更新。还可以考虑与库的作者联系,看看该库是否与 Ivy 兼容。
我分叉了该项目并尝试升级它,不幸的是我不太熟悉 Angular 上的这种编辑级别,所以我无法修复所有问题。
我可以修复几个错误,特别是与ReflectiveInjector deprecated此相关的错误,以便我可以获得一些进展并且项目正在构建。
但是当我导入并尝试按应有的方式使用该组件时,我现在收到此错误:
类型“typeof ModalSigninComponent”的参数不可分配给类型“Type<SimpleModalComponent<null, null>>”的参数。
类型“ModalSigninComponent”不可分配给类型“SimpleModalComponent<null, null>”。
类型具有私有属性“观察者”的单独声明。
有谁知道如何修复它以提供帮助?该存储库似乎已失效且未维护(最后一次提交于 2021 年 12 月)。
当我尝试在我的项目中使用 Ivy + Angular Universal 时出现错误。
我只有在 Ivy 模式下使用 Angular 时才会出现这个错误(当我在我的设置中设置enableIvy为 false 时,我tsconfig.app.json可以成功构建我的应用程序)。
以下是重现我的问题的步骤:
1. 与 Ivy 的新项目
ng new test-angular --enableIvy
2.添加Angular Universal
ng add @nguniversal/express-engine --clientProject test-angular
3. 当我执行 ng build 时出现错误
ERROR in Node does not exist: "path_to/node_modules/@nguniversal/express-engine"
我的 ng --version 输出是:
Angular CLI: 8.1.0
Node: 10.15.3
OS: win32 x64
Angular: 8.1.0
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... platform-server, router
Package Version
--------------------------------------------------------------------
@angular-devkit/architect 0.801.0
@angular-devkit/build-angular …Run Code Online (Sandbox Code Playgroud) 我们最近将我们的 angular 应用程序升级到了最新版本的 Angular (Angular v9)。我们所有的依赖项也都升级了,“ng update”表示我们所有的依赖项都是“有序的”。
当我们在启用 Ivy 的情况下构建应用程序时,编译过程失败并出现大量错误,这是我们以前从未遇到过的:
"angularCompilerOptions": {
"enableIvy": true
}
Run Code Online (Sandbox Code Playgroud)
有些错误很奇怪,说你不能绑定 'ngClass' 或 'ngModel',因为它不是 'div' 的已知属性。它似乎缺少一些主要模块。
例如:
src/app/register/register.component.html:34:48 - error NG8002: Can't bind to 'ngClass' since it isn't a known property of 'div'.
<div class="form-group has-feedback" [ngClass]="{ 'has-error': f.submitted && !fname.valid }">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
src/app/modals/modal-recommendations/modal-recommendations.component.html:12:25 - error NG8002: Can't bind to 'ngClass' since it isn't a known property of 'div'.
<div class="modal-body" [ngClass]="{'text-center': recommendationNotVisible()}">
12 <div class="modal-body" [ngClass]="{'text-center': recommendationNotVisible()}">
Run Code Online (Sandbox Code Playgroud)
src/app/dashboard/dashboard.component.html:53:17 - error NG8002: Can't bind to …Run Code Online (Sandbox Code Playgroud) 正如此问题所述,如果您尝试使用指令访问 ngControl.control:
export class DisabledDirective {
@Input()
set opDisabled(condition: boolean) {
const action = condition ? 'disable' : 'enable';
this.ngControl.control[action]();
}
constructor(private ngControl: NgControl) {}
}
Run Code Online (Sandbox Code Playgroud)
第一次渲染时会出现错误:
core.js:5828 ERROR TypeError: Cannot read property 'disable' of undefined
Run Code Online (Sandbox Code Playgroud) angular ×10
angular-ivy ×10
angular9 ×4
angular-jit ×1
angular2-aot ×1
javascript ×1
typescript ×1
webpack ×1