错误 TS2554:预期 2 个参数,但使用 @ViewChild 得到 1 个
Posted
技术标签:
【中文标题】错误 TS2554:预期 2 个参数,但使用 @ViewChild 得到 1 个【英文标题】:error TS2554: Expected 2 arguments, but got 1 with @ViewChild 【发布时间】:2019-10-21 18:08:13 【问题描述】:我使用 ViewChild 如下:
@ViewChild("InternalMedia") localStream;
@ViewChild("emoji") mEmoji;
在 angular-7.x 之前工作正常
一旦我将它升级到 angular-8.x,它就开始出现以下错误
.../call_emoji/component.ts(41,4): error TS2554: Expected 2 arguments, but got 1.
我检查了https://angular.io/api/core/ViewChild,当我将其更改为
@ViewChild("InternalMedia",static:false) remoteStream;
它有效。我没有得到 static 的作用以及像以前一样工作的价值是什么?
【问题讨论】:
【参考方案1】:根据 Angular 文档静态检查
是否在更改检测运行之前解析查询结果(即仅返回静态结果)。如果未提供此选项,编译器将退回到其默认行为,即使用查询结果来确定查询解析的时间。如果任何查询结果在嵌套视图中(例如 *ngIf),则查询将在更改检测运行后解析。否则,它将在更改检测运行之前解决。
这实际上决定了何时运行查询来检索元素。如果设置为 false,则查询将在检测到任何更改后运行。如果设置为 true,它将立即运行。
有关更多信息以及为什么包含此选项,请参阅this Github issue。
您可能正在寻找的行为是将static
设置为false。这将导致旧行为。但是,如果您的组件视图不是动态的(例如您不使用 *ngIf),您应该能够安全地将其设置为 true。
【讨论】:
不是说 Angular 2 之后一切都将向后兼容吗? @ps0604 据我所知没有。文档中的This 页面甚至谈到了重大更改以及它们将如何处理它们。【参考方案2】:迁移到 Angular 8 后,您应该手动声明它是否是静态的
@ViewChild(QuilldEditorComponent, static: true) quillEditorComponentInstance;
如果您还有其他问题,请向他们提问或了解更多详情,请阅读本期 https://github.com/angular/angular-cli/issues/14553 或查看官方文档 https://angular.io/guide/static-query-migration
// query results available in ngOnInit
@ViewChild('foo', static: true) foo: ElementRef;
OR
// query results available in ngAfterViewInit
@ViewChild('foo', static: false) foo: ElementRef;
【讨论】:
以上是关于错误 TS2554:预期 2 个参数,但使用 @ViewChild 得到 1 个的主要内容,如果未能解决你的问题,请参考以下文章
*.directive.spec.ts 中的错误 TS2554
请我需要帮助,我是 react-native-reanimated 的新手,我遇到以下错误