问题标签 [angular-ivy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2851 浏览

angular - 是否应该将 __ngcc_entry_points__.json 添加到源代码管理中

__ngcc_entry_points__.json在更新到 Angular 9.1 期间,我在项目的所有根文件夹中都出现了一个名为的文件。应该将此文件添加到源代码管理中还是忽略?

它似乎只包含一些哈希信息,所以我认为可以忽略它?

0 投票
0 回答
236 浏览

angular - 类型“FormGroup”不可分配给类型“FormControlLike”

我在我的项目中打开了 Ivy 编译器,该编译器一开始是在 Angular 7 中启动的,现在它在 Angular 9 和 Ivy 上运行。所以在运行时npm run build我得到了这个错误:

案子:

在 TypeScript 中 firstFormGroup 是这样定义的

有人知道如何解决这个问题吗?谢谢!

0 投票
1 回答
1001 浏览

angular - Angular:库升级到 Angular9,演示应用程序的 ngcc 构建错误

我正在维护一个由 Angular Cli 生成的 Angular 库。在工作空间内有一个库和一个演示应用程序,这是从 angular-cli 创建的所有 Angular 库的标准架构。

目前我正在将我的库升级到 Angular 9 的新版本。

我将自动升级灵魂与ng update. 修复了一些迁移问题后(某些 API 已弃用)。该库可以成功构建。

但是我被以库作为依赖项的演示应用程序的构建阻止了。我有ngcc错误。经过一些在线研究,我知道了背景:https ://angular.io/guide/ivy#maintaining-library-compatibility ;Angular 9 的库构建失败

即使我了解ngcc我们现在需要它是什么以及为什么需要它,我仍然无法修复构建错误。

在我的库中,我也有以下模块:

这两个模块都在fotRoot方法中调用从其他模块导入的函数,如下所示:

这个函数只ModuleWithProvidersforRoot方法返回一个。我这里把函数抽象出来,因为这两个模块这部分的逻辑是一样的。

正如我所提到的,库本身已成功构建(基于 google Angular 团队的文档,Library 仍在使用旧的 View Eigine 而不是 Ivy 编译器)。但是演示应用程序无法构建并出现以下错误:

基于 google Angular 团队的文档:demo-app use Ivy compiler,这就是为什么ngcc来这里的原因。

我调整了DIYModuleWithProviders一段时间的类型,但无法解决。基于链接https://angular.io/guide/migration-module-with-providers,在 Angualr 9 中, ModuleWithProviders必须具有泛型类型。所以将其更改为ModuleWithProviders<any>,但它不起作用。

https://github.com/500tech/angular-tree-component/issues/721。有什么想法吗?

0 投票
0 回答
628 浏览

angular - 启用 AOT 和 IVY 时,'router-outlet' 不是 Angular 9 中的已知元素

即使我在 app.module.ts 中有 AppRoutingModule,构建失败并出现错误“'router-outlet' 是一个 Angular 组件,然后验证它是否是该模块的一部分。” 我观察到一种奇怪的行为,这是因为 IVY 和 AOT 启用了,如果其中一个被禁用,它正在工作

这是我的 app.module

这是 app-routing.module.ts

构建失败并出现此错误

0 投票
1 回答
3132 浏览

angular - Angular CLI 9 (Ivy) App build with local library (mono-repo) 失败

我有一个 Angular 9 应用程序,我开始将一些组件移动到一个专用的库项目中,该项目使用辅助入口点(试图模仿 Angular Material 的方法)。如果我使用 Ivy 编译器构建库和应用程序,一切都可以正常构建,但如果使用 --prod 标志构建两者(这会导致在没有 Ivy 的情况下构建库),应用程序构建会失败并出现以下错误:

我尝试更新到最新版本(9.0.2 -> 9.1.0),但它仍然在做同样的事情。我尝试用一​​个全新的超级简单的 mono-repo 项目重新创建它,但在那个简单的情况下它工作得很好。我比较了我的应用程序和简单工作应用程序之间的 tsconfig 和 angular.json 配置文件,但它们几乎相同。所以我有点卡住了。我不确定是什么导致了这种情况,无论是在 ng-packagr 端,没有正确构建库,还是在应用程序端的 angular-build 被搞砸了。任何建议将不胜感激!

0 投票
1 回答
887 浏览

angular-reactive-forms - Angular 9 Ivy,NgControl 未在指令中初始化

我正在尝试将我的项目更新为 Angular9 / Ivy 并面临以下问题。我有一个自定义的“disabledControl”指令,如以下博客(https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110)中所述。我以反应形式使用它,并带有一个表达式来启用/禁用基于复选框组合的特定控件。由于 Angular9 / Ivy 的更新,当首次调用 @Input 方法 set disableControl 时不再设置 ngControl.control。任何提示我们如何修复建议的博客解决方案?

0 投票
1 回答
629 浏览

angular - markDirty() 和 markForCheck() 有什么区别

借助新的 Ivy 编译和渲染管道,我们还拥有一些用于更改检测器的新功能。

我有兴趣markDirty()

据我了解,此功能提供了在未来为组件安排变更检测触发的能力。是的,我知道它目前是不稳定的功能,但它已经在angular.core.

markDirty()所以我的问题是:和有什么区别ChangeDetectorRef.markForCheck()?这个功能有什么好处?

0 投票
0 回答
177 浏览

angular - Angular - 运行时插入带有路由的动态模块

Angular 开发人员,

需要帮助来完成 Angular 应用程序的重组。

让我从我们当前的设置开始:

由于遗留原因,我们仍在使用 JIT。目前我们有 1 个启用了延迟加载的应用程序。有许多子应用程序,但目前,一切都在一个项目中。

我们的基础设施正在实现一个可插拔/可扩展的架构。因此,我们需要将 UI 也分离到单独的应用程序/lib/bundle 中(无论哪个有效),因此我们只能将所需的子应用程序打包到包中。但是需要直接附加和删除子应用程序,而无需重新构建或刷新 angular app。所以基本上当构建 Angular 应用程序时,一些“NewAppModule”不是它的一部分,但我们想在运行时添加它。重申一下,这个 NewAppModule 将是一个大型应用程序,其中包含多个路由和众多组件(约 100 个)。

我们尝试将 NewAppModule 打包成一个单独的块并加载并将其放入 route.config:

主要应用

最后我们可以看到模块,添加到 this.router.config但路由不正确,路由指向 loginRoutes。此外,即使这项工作我们需要帮助来超越目前的范围,我假设我知道模块名称。我们需要的是运行时模块补丁,甚至不知道模块的名称。

我们还尝试更新 router.config 和 router.resetConfig:

我们看到的所有 IVY 教程都是动态导入组件,而不是在运行时导入和附加完整的模块(带路由)

这样的事情在角度上是否可行,如果可以,可以做什么以及我们哪里出错了(我们是否错误地构建了 feature.js)?

任何帮助是极大的赞赏。非常感谢。

0 投票
1 回答
254 浏览

angular9 - 将自定义 DomSanitizer 与 Ivy 一起使用

我在 Angular 9 应用程序中使用 ng-dompurify,并且我用 NgDompurifyDomSanitizer 实现替换了默认的 Angular DomSanitizer。

这样在做类似的事情时

DomPurify 将用于清理该 HTML 字符串。

这在我不使用 Ivy 时效果很好,但是当我使用 Ivy 时,渲染的 HTML 会使用 NgDompurifyDomSanitizer 以外的东西进行清理。我不确定在这种情况下使用的是什么消毒剂,但我看到样式属性已从 html 元素中剥离,如果使用 NgDompurifyDomSanitizer 则不会发生这种情况。

我在这里整理了一个 stackblitz 示例来显示该问题:https ://stackblitz.com/edit/angular-domsanitizer-ivy 。如果您进入 stackblitz 设置并取消选中“启用常春藤”复选框,您可以看到文本呈现为红色,但是当它被选中时,内联样式被剥离并且文本为黑色。

我不确定我是否需要做一些特别的事情才能使这项工作与 Ivy 一起工作,或者 Ivy 是否不支持它。我整天都在用谷歌搜索试图弄清楚,但我没有任何运气。

我会很感激有人可能有任何见解。

编辑:对于那些感兴趣的人,这似乎是一个错误,我已经打开了一张票:https ://github.com/angular/angular/issues/36794

0 投票
1 回答
715 浏览

angular - Angular 9 IVY 延迟加载的组件绑定不起作用

诸如ngIf, ngClass,之类的指令ngStyle在延迟加载的组件中不起作用(在 Angular 9 中引入)。

core.js:12626 Can't bind to 'xxx' since it isn't a known property of 'xxx'.

我设法让它工作的唯一绑定是:[style.color]="color". 延迟加载 webpack js 包只要没有绑定或者只是简单的绑定作为[style.color]="color".

延迟加载的组件没有在 NgModule 中声明,它是这样加载的

完整示例(由于某种原因无法在 stackblitz 中运行): https ://stackblitz.com/edit/angular-zyp3wm

这可以按照以下文章逐步复制 https://johnpapa.net/angular-9-lazy-loading-components/ 您只需要ngIf在其中一个惰性组件中添加一个即可获得我遇到的问题。