代码之家  ›  专栏  ›  技术社区  ›  Konrad Viltersten

不能使用$event以外的任何其他变量名来接收角度中发出的数字

  •  0
  • Konrad Viltersten  · 技术社区  · 5 年前

    注意。问题不是 怎样 为什么? 我可以这样做,没有别的办法。

    我设计了一个这样的组件。它是一个数据行,可以保存一堆och数据行。因此,在每一个这样的例子中,我们都有 (当用户单击移除图标时调用)以及 删除

    @Output() remove: EventEmitter<number> = new EventEmitter<number>();
    ...
    onRemoval() {
      console.log("being removed: " + this.id);
      this.remove.emit(this.id);
    }
    onRemove(id: number) {
      console.log("removing: " + id);
      if (!id)
        return;
    
      this.subRows.splice(id, 1);
    }
    

    我确信我遗漏了一些愚蠢的东西,但当我尝试调试它时,让我困惑的是,发出的值是正确的索引,而收到的值不是。它是 未定义 .

    我尝试过的标记的相关部分如下所示。我也尝试过空的偏执,以及没有偏执。

    <div *ngIf="unfolded">
      <app-data-row *ngFor="let subRow of subRows"
                    (remove)="onRemove(id)"
                    [config]="subRow"></app-data-row>
    </div>
    

    我在google上搜索过这个,但据我所知,我使用了正确的方法 事件发射器 . 而且,似乎只要发出和接收事件,设置就可以工作。只是 身份证件 似乎未正确设置的值。

    唯一的方法就是调用变量 准确地说 $事件

    2 回复  |  直到 5 年前
        1
  •  1
  •   mbojko    5 年前

    在模板中,将子级的输出连接到组件的回调时: $event 是发出的值的名称,这是不可能的。毕竟:调用处理程序不会 需要 把输出作为它的唯一参数。你可以的,不知道,

    <app-data-row *ngFor="let subRow of subRows" (remove)="onRemove(subRow.id)">
    

    <app-data-row *ngFor="let subRow of subRows" (remove)="onRemove(subRow.id, $event)">
    

    <app-data-row *ngFor="let subRow of subRows" (remove)="onRemove($event, subRow.id)">
    

    以此类推。在模板里, 需要作为实际输出值的标识符。

        2
  •  1
  •   Harun Yilmaz    5 年前

    $event @Output 发出值的组件/指令的事件发射器,回调函数用 变量。

    使用括号定义事件侦听器时,例如

    (remove)="onRemove($event)"

    您实际上传递了一个方法引用。以前不需要定义局部变量。棱角本身代替了 值与发出的值。但如果你喜欢

    (remove)="onRemove(id)"

    它认为 id 是一个局部变量,如您在中定义的 *ngFor="let id of idList"

    简而言之,在使用组件/指令的输出事件发射器时,这是捕获发出的值的唯一方法。

    你可以看看这个官方文件: https://angular.io/guide/user-input

    还有这条线: What exactly $event object do in Angular 2?