Asynchronous 角度2-@输入-等待异步方法

Asynchronous 角度2-@输入-等待异步方法,asynchronous,angular,Asynchronous,Angular,砰的一声 Angular的@Input和输入:['']有问题 问题是我有一个person对象。此对象包含id(person.id)。现在我需要在“父”页面的构造函数中初始化它:(注意:简化为plunkr,不是实际代码,而是相同的问题) 这里的问题是:首先绑定将立即发生,将传递的\u id设置为-5。这也将someVar设置为-5 我想等待,直到传递的id被更改为3(由父.setPerson())然后进行一个重异步(http)调用 现在我知道我可以使用angular的ngAfterViewChec

砰的一声

Angular的
@Input
输入:['']
有问题

问题是我有一个
person
对象。此对象包含
id
person.id
)。现在我需要在“父”页面的构造函数中初始化它:(注意:简化为plunkr,不是实际代码,而是相同的问题)

这里的问题是:首先绑定将立即发生,将
传递的\u id设置为-5。这也将
someVar
设置为-5

我想等待,直到传递的
id
被更改为3(由
父.setPerson()
)然后进行一个重异步(
http
)调用

现在我知道我可以使用angular的
ngAfterViewChecked
,但这执行了很多,因为我使用的是不同类型的“制表符”,如果可能的话,我想要一个微调器来显示
passed\u id
从-5到3的时间。NgAfterViewChecked将多次执行此操作,并多次显示微调器

只是想知道是否有不同的方法来解决这个问题,然后a
if(!check){while(true){if(this.passed_id!=-5){this.http.get('..')…;break;}}}}


您可以使用
ngOnChanges()
而不是
ngonit()

您还可以将
passed\u id
设置为setter

_passed_id:number;
@Input set passed_id(value:number) {
  this._passed_id = value;
  if(this.passed_id != -5) {
    this.http.get(...)
  } 
}

塞特可能是我最好的选择,谢谢!对于微调器部分:只需添加一个
*ngIf='passed\u id==-5'
来显示微调器,以及一个
*ngIf='passed\u id=-5'
显示HTML中的内容只要根据传递的值将
isSpinner
设置为
true
false
,然后根据值使用
来显示它(虽然不完全确定您试图实现什么)。已经有微调器部分,仍然感谢您花时间解释:)。(尝试创建一个时间轴,其中包含用户访问个人档案时加载的
个人
操作,有点像instagram)
import { NavController } from 'ionic-angular/index';
import { Component, OnInit , Input} from "@angular/core";


@Component({
  selector: 'child-component',
  template: `
    <div>child:
      <p>Passed id: {{passed_id}}</p>
      <p>Some var: {{someVar}}</p>
    </div>
    `,
    inputs: ['passed_id']
})
export class Child implements OnInit {
  @Input passed_id: number;
  public someVar: number;

  constructor(private nav: NavController) {

    }

    ngOnInit(){
      //cant make into ngAfterViewChecked
      //because that executes too much and the call here
      //will be a heavy http call
      this.someVar = this.passed_id;
    }
}
ngOnChanges(changes) {
  if(this.passed_id != -5) {
    this.http.get(...)
  }
}
_passed_id:number;
@Input set passed_id(value:number) {
  this._passed_id = value;
  if(this.passed_id != -5) {
    this.http.get(...)
  } 
}