Angular - 从子组件获取数据?

标签 angular

我有一个包含用户记录的表。有一个“标签”列,允许您使用一个或多个值来标记记录。

为此,我在该行上创建了一个编辑按钮。单击后,我会显示一个已包装在 ngIf 中的组件。

<span *ngIf="inEditMode(r.RuleParentID, a.AttributeID)">
 <app-inline-select [selected]="a" [source]="fetchSourceList(a.AttributeID)" [ruleParentID]="r.RuleParentID" [attributeID]="a.AttributeID"></app-inline-select>
</span>

包含的组件利用Select2允许多选输入字段。

这一切都工作得很好。但是,我现在需要在父组件中添加一个Save Button,它将向我的服务发送一些数据。不过,我需要来自此包含组件的数据。

在一些研究过程中,我认为 ViewChild 可能是一个选项,但该组件在 ngFor 循环中多次出现在页面上,因此它本质上是动态的,不允许我使用直接按名称调用它,这正是 ViewChild 所需要的。

我怎样才能获取数据?保存按钮与其本身包含的组件无关。

最佳答案

selected 是一个事件而不是属性,因此您需要将其包装在 () 而不是 [] 中。 您可以调用函数来确定触发选定事件时需要执行的操作。

<span *ngIf="inEditMode(r.RuleParentID, a.AttributeID)">
 <app-inline-select (selected)="saveToArray($event)" [source]="fetchSourceList(a.AttributeID)" [ruleParentID]="r.RuleParentID" [attributeID]="a.AttributeID"></app-inline-select>
</span>

在组件中

    arrays = []
    saveToArray(a) {
      this.array.push(a);
    }

然后

   onSave() {
     this.service.save(arrays).then(() => {})
   }

还有viewChildren您将在其中拥有一系列组件。因此您可以循环遍历每个组件并获取数据。

  @ViewChildren(InlineSelectComponent) alerts: QueryList<InlineSelectComponent>

  ngAfterViewInit() {
    this.alerts.forEach(instance => console.log(instance));
  }

关于Angular - 从子组件获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46287220/

相关文章:

javascript - 为什么在使用带有箭头函数的 canvas.toBlob() 时,Angular 的 ChangeDetection 没有被触发?

javascript - 在没有angularfire的情况下以 Angular 6初始化firebase

Angular 2 子路由

javascript - Angular : Fetch value of textbox onclick of button

html - 从 formbuilder 中获取一个 id 以删除 Angular 6 中的一行

javascript - Angular 4 - 如何让管道触发编程值更改(无键盘事件)

javascript - 在 Angular 应用程序中使用 AngularJS 组件时出错 : "Error: Trying to get the AngularJS injector before it being set."

angular - ngx-color-picker 在输入更改时关闭

javascript - 在执行 Angular 2 CLI 项目时如何添加第三方包

javascript - 如何比较两个对象 typescript angular6