我已经使用Standart和自定义控件(一个简单的按钮比例来推送和检索值)构建了一个动态表单.我遵循了Angular tutorialsothers,以确保以正确的方式构建访问器.

zoom 组件的值始终正确并正确更新.如果我单击Submit按钮,该值是OK的,但出于某种原因,Change事件不会触发.

我用工作项目和一些示例数据创建了一个Stackblitz. 其目的是在每次更改时显示表单数据,无论它是文本框、下拉菜单还是自定义比例组件.我还有一个Show按钮,可以手动查看这些值.

dynamic-form.component.html中,我有一个(change)="onSubmit()"事件来显示值.

正如您将看到的,更改文本框或文本框将显示值,但按下比例按钮并不显示值(但它会正确更新,您可以通过按下"显示"按钮来查看).

有什么 idea 为什么没有检测到更改事件?正如我从阅读文档中所理解的,在item-scale.component.ts函数chooseValue(scaleValue: number)中,行this.onChange(this.scaleValue);应该触发更改事件,不是吗?

推荐答案

我们可以只监听父组件上的值变化并触发onSubmit,使用监听器的方法是很长的路要走!

此外,通过使用debounceTime,我们可以减少激发值更改的次数,从而使代码具有更好的性能!

您还没有为要触发的事件定义更改@output,而这正是您代码中的问题!

(change)事件仅存在于HTML表单元素(例如:inputselect等)上,但我们在Angular 组件上定义了(change),因此Angular 组件会将其解释为output event emitter(@Output),因为子组件上没有定义@Output,所以我们不会触发方法

  ...
  ngOnInit() {
    const group: any = {};

    this.items.forEach((elem) => {
      group[elem.id] = new FormControl(elem.value || '');
    });

    this.form = new FormGroup(group);

    this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {
      this.onSubmit();
    });
  }
  ...

stackblitz demo

Angular相关问答推荐

cat Owl carousel 位置下一个和上一个图片

Angular 单元测试组件s @ Input.'变化值检测

使用当前选定的选项创建IF语句

PrimeNG面包屑组件生成奇怪的&

带信号数据源的17角material 表

茉莉花-模板中调用了如何判断角管

如何解决在StackBlitz中使用SPARTIER时出现无法解析解析器错误(&C)?

MonoTypeOperatorFunction不可分配给OperatorFunction类型的参数

等待可观察性完成后再调用下一个

为什么Angular的ViewEncapsulation枚举有没有值为1的键?

Angular ngSubmit 不起作用(内部按钮和导入模块)

如何在不刷新整页的情况下更新组件

ViewChild 和 ContentChild 的所有有效 Select 器是什么?

MatToolbar 与 Angular 9 一起使用时抛出错误

Angular 2 filter/search 列表

在Angular2 Dart中设置路由和RouterLink的正确方法是什么

Angular 2 单元测试 - 出现错误无法加载ng:///DynamicTestModule/module.ngfactory.js

如何从materialAngular使用分页器?

ng build 时超出调用重试次数异常

'Observable' 类型上不存在属性 'filter'