У меня есть компонент на моей корневой странице, которая выставляет несколько связываемых свойств и может использоваться как это:Angular2/Ionic2 :: Reload компонент
<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
«sngOnInit
, связываются следующим образом:this.baseComponent.value =() => this.order.currentStage
Но это требует от меня, чтобы изменить Progress
компонент, а также. Есть ли способ, который не требует от меня изменения Progress
или Order
?
Я вижу ответы с '' Subject'', если я понимаю вас ясно. Вы хотите изменить порядок родительских компонентов, отраженный в дочерней директиве. Не изменит ли значение изменения изменения порядка в дочерней директиве, когда значение порядка изменено в родительском? – raj
Прошу прощения, я не совсем понял, что вы просили. Не могли бы вы немного перефразировать свой вопрос? – AweSIM