Asynchronous 角度2-@输入-等待异步方法
砰的一声 Angular的Asynchronous 角度2-@输入-等待异步方法,asynchronous,angular,Asynchronous,Angular,砰的一声 Angular的@Input和输入:['']有问题 问题是我有一个person对象。此对象包含id(person.id)。现在我需要在“父”页面的构造函数中初始化它:(注意:简化为plunkr,不是实际代码,而是相同的问题) 这里的问题是:首先绑定将立即发生,将传递的\u id设置为-5。这也将someVar设置为-5 我想等待,直到传递的id被更改为3(由父.setPerson())然后进行一个重异步(http)调用 现在我知道我可以使用angular的ngAfterViewChec
@Input
和输入:['']
有问题
问题是我有一个person
对象。此对象包含id
(person.id
)。现在我需要在“父”页面的构造函数中初始化它:(注意:简化为plunkr,不是实际代码,而是相同的问题)
这里的问题是:首先绑定将立即发生,将传递的\u id设置为-5。这也将someVar
设置为-5
我想等待,直到传递的id
被更改为3(由父.setPerson()
)然后进行一个重异步(http
)调用
现在我知道我可以使用angular的ngAfterViewChecked
,但这执行了很多,因为我使用的是不同类型的“制表符”,如果可能的话,我想要一个微调器来显示passed\u id
从-5到3的时间。NgAfterViewChecked将多次执行此操作,并多次显示微调器
只是想知道是否有不同的方法来解决这个问题,然后aif(!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(...)
}
}