访问ngOnChanges中的最新输入属性

时间:2019-11-08 08:09:32

标签: angular angular2-directives

Angular官方文档说:

“ ngOnChanges是生命周期挂钩,当指令的任何数据绑定属性发生更改时都会调用它。定义ngOnChanges()方法来处理更改。

尚不清楚是否意味着ngOnChanges生命周期方法中是否实际提供了update / latest输入属性。所以我做了一个简单的实验:

//trmplate.html
<p [mydirective] = "GetFirstStudent().Name"></p>

其中Name是组件中的属性,我将第一个人的名字设置为“ Michael”。

因此在指令类中作为mydirective选择器:

@Directive({
    selector: "[mydirective]"
})
export class CustomDirective{
   ...
    @Input("mydirective")
    personName: string;

    ngOnChanges() {
       console.log(personName);
    }
}

所以我刷新浏览器,控制台确实显示以下输出:

  

迈克尔

因此,这证实了我可以在ngOnChanges中访问最新的输入属性。

我的理解正确吗?

3 个答案:

答案 0 :(得分:1)

您可以在这里StackBlitz Link

找到工作示例
ngOnChanges(change: SimpleChanges){
  console.log(change['valueFromParent']);
  if (change['valueFromParent'].currentValue === undefined ){
    this.currentStatus = 'Not Change Detected';
  }
 else if(change['valueFromParent'].currentValue === true){
   this.currentStatus = change['valueFromParent'].currentValue
 }
 else if( change['valueFromParent'].currentValue === false) {
   this.currentStatus = change['valueFromParent'].currentValue
 }
}

答案 1 :(得分:0)

赞:

ngOnChanges(changes: SimpleChanges) {
   console.log(changes.personName);
   if (changes.personName)
   console.log(changes.personName.currentValue)
}

答案 2 :(得分:0)

您的实现适用于字符串和整数,因为它们是通过值传递的,而不适用于数组和对象输入,因为它们是通过引用传递的。

SimpleChanges参数用于获取输入属性的新值和先前值

[HttpPost]
public JsonResult MassDelete(int[] selectedIds)
{
    return Json(new { success = true });
}