【发布时间】:2019-05-22 11:56:37
【问题描述】:
我正在构建一个 Angular 7 应用程序,并在运行时根据数据类型动态创建组件(表单控件)。
以下是我的 dynamic-loading-component.ts 文件的摘录
this.componentRef.instance.form = this.form;
const dynamicComponent = this.componentRef.instance;
我正在将一些函数绑定到这个动态组件,如下所示:
dynamicComponent.onKeyUp = function (value) {
self.onValueChangeOfControl(dynamicComponent, value);
};
在其中一种控件类型中,例如在 number.component.html 文件中,我有以下代码
<input type='number' [value]="metadata.Value" [name]="metadata.Name" [id]="metadata.Name"
(keyup)="onKeyUp($event.target.value)">
每当keyupevent 发生时,它都会正确调用全局分配的dynamicComponent.onKeyUp 函数,并且在本地一切正常。
但是,当我使用 ng build --prod 构建它时,它给了我以下错误 -
number\number.component.html(2,3): : Property 'onKeyUp' does not exist on type 'NumberComponent'.
Angular 期望在我的 number.components.ts 文件中定义 onKeyUp() 但是,我在上面有这个绑定到动态组件。我不想在每个控件组件文件中为此类事件编写重复的代码。
有哪些方法可以解决这个问题? ng build 工作正常,但我需要 ng build --prod 才能获得优化的部署位。
想法?
【问题讨论】:
-
请张贴代码而不是图片。为什么在模板文件中使用
onKeyUp而不是(keyUp)eventemitter?如果你有它在一个父组件中,你有没有设置它以便NumberComponents扩展它? -
这不是父子关系案例。我正在尝试根据控件的数据类型动态构建表单。 (keyup) 事件绑定在单独的控件模板中,正如您在我的帖子中看到的那样。我无法粘贴完整的代码,因为这只是整个应用程序的一小部分。您可以参考我用来创建这些动态组件的方法的几个链接。例如netbasal.com/…
-
我不是在谈论父/子结构,我指的是您的组件类。 “上面的动态组件”是什么意思,目前还不清楚。我经常使用动态组件创建,但从来没有遇到过这个问题。该错误清楚地说明了
Property 'onKeyUp' does not exist on type 'NumberComponent',所以这就是您应该查看的内容。组件是否具有该属性?
标签: angular angular-cli angular-forms angular-aot