问题标签 [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 投票
1 回答
689 浏览

angular - Angular 9 Ivy 模板类型检查'对象可能是'null''

基本上我有2个组件。存储库

这会在为应用程序提供服务时出现此错误:

src/app/app.component.ts:7:37 中的错误 - 错误 TS2531:对象可能为“空”。

每个都使用另一个。我认为这就是错误出现的原因,因为一个没有定义而另一个是被定义的。但它允许为空。这在 Angular 8 中有效,但转换为 9 后不再适用。

我怎样才能让它忽略这个特殊情况?

  • 我无法更改日期选择器。
  • 更改 tsconfig 'fullTemplateTypeCheck' 也不是一个可行的选择。
  • 更喜欢不会开始使用表单事件的简单解决方案。我确实在常春藤迁移中发现,我可以使用“!” 非空断言运算符,但在这种情况下我无法让它工作
0 投票
4 回答
5492 浏览

angular - Angular / Ivy 错误:错误:Token InjectionToken XXXXXXXXX 缺少 ɵprov 定义

更新到 Angular 9 / Ivy 编译器后出现错误

0 投票
2 回答
450 浏览

angular - Angular 9 Ivy 构建 - 扩展错误

早上好!

我最近将一个 v8 项目更新到 v9,它似乎工作正常。但是,我有一些扩展,编译器会抛出一些关于它们的错误,这在我最近升级的另一个项目中没有。

扩展是构造函数和原型的基本类型。它们设置得很好——我拥有它们的多个项目中都可以使用相同的设置。至关重要的是,它们可以正常工作,而在其他升级的项目中没有任何错误。

但是,要全面获得基本的使用确认:

将 iface 添加到typings.d.ts,例如

实施,例如

并导入main.ts

我的路径没有改变,它们都指向我认为可以检查它们的所有正确位置的所有正确文件(src/typings.d.ts在我放置它的 src 中,tsconfig.app.ts像以前一样包含它,等等)。

这会导致构建错误;对于扩展的所有用法,我都会收到垃圾邮件,并且构建最终会停止:

并尝试浏览会产生Cannot GET/基本消息。但是,它会在保存文件时进行通常的重新构建,其中它会再次显示所有这些错误消息,但这次无论如何都会完成构建并且可以正常工作。

有没有人可以指出我可能错过的方向?在这两个项目之间,我检查了angular.jsontsconfigs 、main.ts等之间的任何重大变化,但到目前为止我还是一无所获。

谢谢。

编辑:

恢复并再次尝试升级,扩展在更新指南的第一步中断,只需使用ng update @angular/core@8 @angular/cli@8.

从那个更新开始,它就死了。跳过这一步(无论如何我已经在运行一个 v8 应用程序)并尝试直接升级到 9,遗憾的是也杀死了它。

更新:

理查德的回答似乎已经摆脱了所有日期扩展错误消息。它似乎根本不喜欢接口的存在,而且在尝试他的方法时DateConstructor,它似乎也对 的用法不是特别满意。moment

更新编辑:

日期扩展看起来与其他扩展完全一样,唯一的区别是那里有一条import moment from 'moment'线。删除这些东西似乎没有什么区别。就像s 与s 或sDate是不同的野兽...StringArray

0 投票
1 回答
712 浏览

angular - 将 webpack 的 `require.context` 与 angular cli 和 ivy 一起使用

我们正在尝试将没有 angular cli(直接使用 webpack 和自定义服务器)构建的 angular 应用程序移植到带有 cli 的 angular 9。升级到 Angular 9 本身运行良好。在我们开始使用 angular cli 之后,我们遇到了几个问题。

现在唯一剩下的就是构建似乎根本没有接听 webpack 的require.context调用。我们在任何地方都使用它来动态查找和注册我们的组件,它以前工作得很好,只使用@types/webpack-env包。但是现在,在 vscode 中,没有语法错误,但是当我们尝试运行时ng serve,它会为每个具有 的文件产生以下错误require.context

整个构建失败了。我猜这是因为常春藤在某种程度上,但我不知道如何解决这个问题,我到处寻找,但我没有找到解决方案。我尝试安装@types/webpack-env依赖项(而不是开发依赖项),但没有运气。我不确定为什么会这样,我认为 webpack 会正常工作并在 ivy 开始工作之前接听这些电话。

0 投票
4 回答
21028 浏览

angular - Angular 9“错误:此构造函数与依赖注入不兼容。”

这个奇怪的错误,我不记得在 Ivy 之前看到过,它出现在使用最新的 Angular 9 CLI 创建的新应用程序的设置中。看起来这可能是 Ivy 的错误?任何有关如何修复的想法将不胜感激。

ng 测试的错误结果

app.component.ts

app.component.spec.ts

package.json 依赖项

注意:修复NullInjectorErrorAuthService 和路由器后出现此错误。

0 投票
0 回答
273 浏览

angular - Angular View 未在 iOS 上更新

我目前正在开发一个离子应用程序。在一个页面上,我有一个谷歌地图,并希望在地图准备好时显示一个按钮,所以我引入了一个变量,该变量设置为调用true谷歌地图时onReady。这适用于 Android,但在 iOS 上它不起作用(我认为是因为内部 WebView 不同)。然后当我与页面交互时,例如打开侧边菜单,整个视图更新并显示按钮。

认为我在将变量设置为后已经尝试过true

任何想法为什么视图没有更新?

编辑:我只是注意到它只在 App Startup 上(它是主页)。当我转到另一个页面并返回时,它可以工作

0 投票
4 回答
5955 浏览

angular - Angular 9 延迟加载组件错误:InjectionToken mat-autocomplete-scroll-strategy 没有提供程序

我将我的项目从 Angular 8 升级到 9,并重构了我的代码以利用延迟加载组件的能力。对于我的大多数组件来说,这很好用,但我有一个抛出错误,我需要帮助解决这个问题。

这是我的组件代码,后面跟着错误。模块与组件在同一个文件中定义。

错误:

null:错误:未捕获(承诺中):NullInjectorError:R3InjectorError(AppModule)[InjectionToken mat-autocomplete-scroll-strategy -> InjectionToken mat-autocomplete-scroll-strategy -> InjectionToken mat-autocomplete-scroll-strategy]:NullInjectorError:否InjectionToken mat-autocomplete-scroll-strategy 的提供者!./node_modules/@angular/core/ ivy_ngcc /fesm5/core.js/NullInjector.prototype.get@http//localhost:4200/vendor.js:37066:25" ./node_modules/@angular/core/ ivy_ngcc /fesm5 /core.js/R3Injector.prototype.get@http//localhost:4200/vendor.js:47422:33 ./node_modules/@angular/core/ ivy_ngcc /fesm5/core.js/R3Injector.prototype.get@http/ /localhost:4200/vendor.js:47422:33 ./node_modules/@angular/core/ivy_ngcc/fesm5/core.js/R3Injector.prototype.get@http//localhost:4200/vendor.js:47422:33 ./node_modules/@angular/core/ivy_ngcc/fesm5/core.js/NgModuleRef$1.prototype.get@http//localhost:4200/vendor.js:60382:33 get@http//localhost:4200/vendor.js:58703:35 getOrCreateInjectable@http//localhost :4200/vendor.js:39763:39 ɵɵdirectiveInject@http//localhost:4200/vendor.js:50290:12 MatAutocompleteTrigger_Factory@http//localhost:4200/vendor.js:76965:788 getNodeInjectable@http//localhost:4200 /vendor.js:39871:44 searchTokensOnInjector@http//localhost:4200/vendor.js:39807:16 getOrCreateInjectable@http//localhost:4200/vendor.js:39729:58 ɵɵdirectiveInject@http//localhost:4200/vendor .js:50290:12 ɵɵinject@http//localhost:4200/vendor.js:36956:57 factory@http//localhost:4200/vendor.js:47681:44 multiResolve@http//localhost:4200/vendor.js :55407:21 multiProvidersFactoryResolver@http//localhost:4200/vendor.js:55372:12 getNodeInjectable@http//localhost:4200/vendor.js:39871:44 searchTokensOnInjector@http//localhost:4200/vendor.js:39807:16 getOrCreateInjectable@http//localhost:4200/vendor.js:39729:58 ɵɵdirectiveInject@http//localhost:4200/vendor.js:50290: 12 FormControlName_Factory@http//localhost:4200/vendor.js:74579:400 getNodeInjectable@http//localhost:4200/vendor.js:39871:44 searchTokensOnInjector@http//localhost:4200/vendor.js:39807:16 getOrCreateInjectable @http//localhost:4200/vendor.js:39729:58 ɵɵdirectiveInject@http//localhost:4200/vendor.js:50290:12 ɵɵinject@http//localhost:4200/vendor.js:36956:57 factory@http //localhost:4200/vendor.js:47681:44 getNodeInjectable@http//localhost:4200/vendor.js:39871:44 searchTokensOnInjector@http//localhost:4200/vendor.js:39807:16 getOrCreateInjectable@http// localhost:4200/vendor.js:39729:58 ɵɵdirectiveInject@http//localhost:4200/vendor.js:50290:12 MatInput_Factory@http//localhost:4200/vendor.js:99837:370 getNodeInjectable@http//localhost:4200/vendor.js:39871:44 instantiateAllDirectives@http//localhost:4200/vendor.js:44362: 42 createDirectivesInstances@http//localhost:4200/vendor.js:43753:29 ɵɵelementStart@http//localhost:4200/vendor.js:50436:34 ɵɵelement@http//localhost:4200/vendor.js:50487:19 SearchComponent_Template @http//localhost:4200/search-search-search-component.js:190:56 executeTemplate@http//localhost:4200/vendor.js:43726:19 renderView@http//localhost:4200/vendor.js: 43551:28 renderComponent@http//localhost:4200/vendor.js:44741:15 renderChildComponents@http//localhost:4200/vendor.js:43412:24 renderView@http//localhost:4200/vendor.js:43576: 34 ./node_modules/@angular/core/370 getNodeInjectable@http//localhost:4200/vendor.js:39871:44 instantiateAllDirectives@http//localhost:4200/vendor.js:44362:42 createDirectivesInstances@http//localhost:4200/vendor.js:43753:29 ɵɵelementStart @http//localhost:4200/vendor.js:50436:34 ɵɵelement@http//localhost:4200/vendor.js:50487:19 SearchComponent_Template@http//localhost:4200/search-search-search-component.js: 190:56 executeTemplate@http//localhost:4200/vendor.js:43726:19 renderView@http//localhost:4200/vendor.js:43551:28 renderComponent@http//localhost:4200/vendor.js:44741: 15 renderChildComponents@http//localhost:4200/vendor.js:43412:24 renderView@http//localhost:4200/vendor.js:43576:34 ./node_modules/@angular/core/370 getNodeInjectable@http//localhost:4200/vendor.js:39871:44 instantiateAllDirectives@http//localhost:4200/vendor.js:44362:42 createDirectivesInstances@http//localhost:4200/vendor.js:43753:29 ɵɵelementStart @http//localhost:4200/vendor.js:50436:34 ɵɵelement@http//localhost:4200/vendor.js:50487:19 SearchComponent_Template@http//localhost:4200/search-search-search-component.js: 190:56 executeTemplate@http//localhost:4200/vendor.js:43726:19 renderView@http//localhost:4200/vendor.js:43551:28 renderComponent@http//localhost:4200/vendor.js:44741: 15 renderChildComponents@http//localhost:4200/vendor.js:43412:24 renderView@http//localhost:4200/vendor.js:43576:34 ./node_modules/@angular/core/42 createDirectivesInstances@http//localhost:4200/vendor.js:43753:29 ɵɵelementStart@http//localhost:4200/vendor.js:50436:34 ɵɵelement@http//localhost:4200/vendor.js:50487:19 SearchComponent_Template @http//localhost:4200/search-search-search-component.js:190:56 executeTemplate@http//localhost:4200/vendor.js:43726:19 renderView@http//localhost:4200/vendor.js: 43551:28 renderComponent@http//localhost:4200/vendor.js:44741:15 renderChildComponents@http//localhost:4200/vendor.js:43412:24 renderView@http//localhost:4200/vendor.js:43576: 34 ./node_modules/@angular/core/42 createDirectivesInstances@http//localhost:4200/vendor.js:43753:29 ɵɵelementStart@http//localhost:4200/vendor.js:50436:34 ɵɵelement@http//localhost:4200/vendor.js:50487:19 SearchComponent_Template @http//localhost:4200/search-search-search-component.js:190:56 executeTemplate@http//localhost:4200/vendor.js:43726:19 renderView@http//localhost:4200/vendor.js: 43551:28 renderComponent@http//localhost:4200/vendor.js:44741:15 renderChildComponents@http//localhost:4200/vendor.js:43412:24 renderView@http//localhost:4200/vendor.js:43576: 34 ./node_modules/@angular/core/4200/vendor.js:43726:19 renderView@http//localhost:4200/vendor.js:43551:28 renderComponent@http//localhost:4200/vendor.js:44741:15 renderChildComponents@http//localhost:4200/ vendor.js:43412:24 renderView@http//localhost:4200/vendor.js:43576:34 ./node_modules/@angular/core/4200/vendor.js:43726:19 renderView@http//localhost:4200/vendor.js:43551:28 renderComponent@http//localhost:4200/vendor.js:44741:15 renderChildComponents@http//localhost:4200/ vendor.js:43412:24 renderView@http//localhost:4200/vendor.js:43576:34 ./node_modules/@angular/core/ivy_ngcc /fesm5/core.js/ComponentFactory.prototype.create@http//localhost:4200/vendor.js:58804:23 createContainerRef/R3ViewContainerRef

0 投票
0 回答
1300 浏览

angular - 使用 Angular Ivy 构建 SSR 的 Flex Layout 编译错误

我尝试将 Angular 8 应用程序升级到 Angular 9,但在 Ubuntu/Debian 下遇到构建错误(Windows 工作正常):

我正在构建一个带有生产标志 ( ng run app:server --configuration=production) 的 SSR 包。这是来自 Gitlab-CI 的构建日志的相关部分。

我猜怎么回事是 Ivy 没有得到核心模块已经编译然后在@angular/flex-layout

已清除所有缓存。它似乎只适用于 Windows。其他装有 Ubuntu 或 Debian 的计算机都会在同一个地方出现故障。

有人对 Angular 9 和 Ivy 有过类似的问题吗?

0 投票
2 回答
3766 浏览

angular - 错误:试图覆盖.__ivy_ngcc_bak 带有 ngcc 备份文件,这是不允许的

我已从 Angular 8 升级到 9,并按照此处的所有步骤启用了 Ivy 。当我运行npm install一些我的包时抛出错误:

Tried to overwrite <package_path>.__ivy_ngcc_bak with an ngcc back up file, which is disallowed.

这是什么意思,为什么会这样?我很难找到有关它的任何信息。我已经为所有抛出此错误的软件包安装了最新版本,但运行时仍然出现错误npm install。谢谢!

0 投票
3 回答
2511 浏览

angular - 我需要在 CI 作业中缓存什么以避免每次 ngcc 重新编译?

有了 Angular 9 和它的新编译引擎 IVY,我的 CI 构建时间大大增加了。这当然是因为ngcc在许多模块上运行。

例如

我以为ngcc将已编译的库缓存在 中node_modules,但我node_modules的缓存在我的 CI 作业中,并且仍在进行编译,所以不可能。

我应该缓存什么路径以避免ngcc在每次构建时重新编译所有模块?