当前位置: 首页 > 知识库问答 >
问题:

在Angular [duplicate]中分配多个属性值后调用方法

戚翰飞
2023-03-14

我有一个具有两个输入属性的 Angular 组件。我想在设置两个属性时调用一个方法,是否有任何事件可以使用?

export class ProductComponent implements OnInit {

  _product: Product;
  @Input() set product(value: Product) {
      _product = value;
  }
  
  _attributeType: any;
  @Input() set attributeType(value: any) {
      _attributeType = value; 
      this.doSomeWorkWhenBothProductAndAttributeTypeAreSet();
  }
 
  doSomeWorkWhenBothProductAndAttributeTypeAreSet() {
  }
}

在上面的代码示例中,当已经分配了产品和属性类型时,我想调用dosomeworkfwhentbothproductandattributetypeareset()。我尝试在设置第二个属性后调用该方法,但有时产品需要更长的时间来分配,因此无法按预期工作。

共有2个答案

丰赞
2023-03-14

Angular有一些lyfecycle钩子,只能在确定的时刻用于执行部分逻辑,这是组件具有的每个生命周期钩子的列表:

    现在,angular第一次在< code>ngOnInit之前调用< code>ngOnChanges,以允许您使用Init上的值访问< code>@Input()变量。说你有两种主要的方法来实现你的目标:

      <李>通过使用<代码> ngOnChanges() < /代码>:< /
    public ngOnChanges(changes: SimpleChanges): void {
        // you can check here if your props are set and if so call your method
        console.log(changes['YOUR_PROP'].currentValue);
    }
    

    注意,这个方法将在每次@Input()属性更新时被调用

    public ngOnInit(): void {
        // here you can access your props since angular has called onChanges before and has already initialized them
    }
    
    单品
    2023-03-14

    您可以实现 OnChanges 接口以检查对输入属性的更改,并根据此添加一些逻辑。

    export class ProductComponent implements OnInit, OnChanges {
    
      @Input() set product(value: Product) {
          _product = value;
      }
      
      _attributeType: any;
      @Input() set attributeType(value: any) {
          _attributeType = value; 
      }
     
      ngOnChanges(simpleChange: SimpleChanges) {
        if (this._attributeType && this._product) {
          this.doSomeWorkWhenBothProductAndAttributeTypeAreSet();
        }
    
        // or check simpleChange to retrieve some informations :
        // - new value
        // - previous value
      }
    
      doSomeWorkWhenBothProductAndAttributeTypeAreSet() {
      }
    }
    
    

    有关官方文档的更多详细信息

     类似资料:
    • 问题内容: 在Swift中,我尝试执行以下操作: Xcode 在方法中在线上报告错误。 为什么?如果将结构更改为类,则不会出错。 问题答案: 如果要修改结构的属性,请将该函数标记为mutating。

    • 得到的数据值不是一个有效的属性

    • 我正在开发一个移动应用程序,现在我正在进行身份验证。在我访问我的主页之前,我需要访问我构建的API上的各种endpoint,然后才能向用户显示数据。 在Postman中测试时,所有endpoint都返回了正确的数据,但是当我在应用程序中使用它时,我在第二次异步调用中得到了一个值。 我确信这与这些呼叫的顺序有关,所以我只是在寻找一些帮助,如何在开始另一个呼叫之前正确地等待一个呼叫完成。

    • 问题内容: 我试图在此查询上建立一点点。我正在搜索的索引也有一个带有ID的“实体”字段。因此,根据实体的ID,一些记录将具有“实体”:16,“实体” 156等。我需要以一种可以传递数组或值列表的方式来扩展此查询,例如{:term => {:entity => [1,16,100]}}},并获取具有以下内容的记录:这些整数之一作为其实体值。到目前为止我还没有运气,有人可以帮我吗? 问题答案: 使用代

    • 我正在修改一个现有的Angular项目(不是我的),向我的外部API添加一个新的调用。 这是服务方法: 我把它用在appcomponent.ts如下: 执行时出现以下错误: node_modulesERROR TypeError:无法在node_modules读取null的属性“长度”。/map.js.MapOperator.call/@角/公共/费斯姆5/node_modules更新(_subs