我有一個公開的幾個可綁定屬性,並可以這樣用我的根頁上的組件:Angular2/Ionic2 ::刷新組件
<myprogress [value]="current" [max]="maximum"></myprogress>
在我的應用程序,各種類型的對象要求進度顯示。所以我創造了一些指令,象下面這樣:
@Directive({
selector: 'myprogress[order]'
})
export class OrderProgress {
@Input('order') order: Order;
constructor(private baseComponent: Progress) {}
ngOnInit() {
this.baseComponent.value = this.order.currentStage;
this.baseComponent.max = this.order.totalStages;
}
}
這讓我來代替像來電:有一個更可讀的
<myprogress [value]="order.currentStage" [max]="order.totalStages"></myprogress>
:
<myprogress [order]="order"></myprogress>
這工作得很好,直到的某些部分應用程序本身會更改訂單。在那種情況下,已經被渲染的myprogress
組件不會被更新。我也明白爲什麼。當組件被渲染時,ngOnInit
函數只運行一次,並且無法向指令指示訂單的某些屬性已更改,並且需要計算value
和max
的新值。
有沒有辦法解決這個問題?
一個可能的解決方案,我有是這樣的:
- 修改
Progress
組件接受的數字,以及一個返回數的函數。 - 在
OrderProgress
的ngOnInit
,綁定如下:this.baseComponent.value =() => this.order.currentStage
但是,它需要我改變Progress
組成部分,也是。有沒有一種方法不需要我改變Progress
或Order
?
如果我明白你的理解,我會用''Subject''來看答案。您希望父組件順序中的更改反映在子指令中。在父指令中,當訂單的價值突變時,不會更改子訂單中訂單的檢測更改值? – raj
對不起,我沒有完全理解你提出的問題。你能稍微改述一下你的問題嗎? – AweSIM