【问题标题】:$Event not being capture by Emitting Event in Angular$Event 没有被 Angular 中的 Emitting Event 捕获
【发布时间】:2021-12-30 23:56:00
【问题描述】:

抱歉,我是 Angular (V12) 的新手,如果我不清楚我的问题,请原谅我。但是我基本上遇到了 $Event 没有捕获从另一个组件发出的自定义对象数据的问题。当我在父组件中设置函数时,它给了我以下错误:错误不能分配给“CustomObj”类型的参数。 “事件”类型缺少“prop1、prop2”类型的以下属性。当我在触发发射之前执行 console.log 时,我可以看到我的属性已成功存储并传递。但我无法显示它。

子组件发射:

   onUpdate(myObject: objectInformation)
{
   this.edit.emit(myObject);
   console.log(this.myObject);
  }

父组件:

HTML

<app-edit-task (edit) = "onEdit($event)"></app-edit-task>

TS

onEdit(myObject: objectInformation){
    this.currentObject= myObject;
    console.log(this.currentObject);
  }

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    您没有共享@Output,因此请检查事件发射器是否发出正确的类型:

    @Output() newItemEvent = new EventEmitter<objectInformation>();
    

    另外,如果objectInformation 是一个对象,则考虑大写为ObjectInformation

    现在关于问题:

      onUpdate(myObject: objectInformation){
         this.edit.emit(myObject);
         console.log(this.myObject);
      }
    

    控制台工作的原因是因为您使用的是this.myObject 而不是myObject

    关于this 的更多解释:当您使用this 时,您是从全局范围中获取变量myObject,而不是从本地范围中获取myObject

    因此,如果您不需要参数 myObject: objectInformation,请将其删除并从全局范围发出变量 myObject,如下所示:

     onUpdate(){
       this.edit.emit(this.myObject);
     }
    

    【讨论】:

    • 抱歉,我确实忘记包含输出。我写的和你上面写的类似:@Output() 编辑:EventEmitter = new EventEmitter();我已经从控制台中删除了“this”键盘,它可以按预期两种方式工作。当我从 DOM 获取信息时,我需要包含 objectInformation 类型的参数 myObject:按钮>
    猜你喜欢
    • 2022-08-15
    • 2017-05-10
    • 2023-01-28
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2017-12-14
    • 2012-07-29
    相关资源
    最近更新 更多