У меня есть родительский и дочерний компонент. Родительский компонент имеет index
и передает его дочернему компоненту как @Input
. Это значение index
постоянно изменяется в родительском компоненте, а внутри моего дочернего компонента я хочу запускать функцию каждый раз, когда изменяется компонент родителя index
. У этого есть компонент слайда, который постоянно меняет его. Как я могу это достичь? Я пробовал с приведенным ниже кодом (this.index.subscribe(() =>
), но я получаю, что это не функция каждый раз, когда я пытаюсь инициализировать подписку.Angular2, подписавшийся на изменения в @Input в дочернем компоненте
РЕДАКТИРОВАТЬ: В шаблоне нет соответствующего кода, который может повлиять на него, поэтому он не предоставляется. ngOnChange
, похоже, не работает, поскольку изменение происходит в директиве, в отличие от шаблона parent
.
Ребенок:
import {Component, OnInit, ViewChild, Input} from '@angular/core';
import {Observable} from 'rxjs/Observable';
@Component({
selector: "child",
templateUrl: "components/child/child.html",
})
export class ChildComponent implements OnInit {
@Input() index: string;
currentIndex: any;
constructor() {}
ngOnInit() {}
ngOnChanges(){}
ngAfterViewInit() {
console.log("index " + this.index);
this.currentIndex = this.index.subscribe(() => {
console.log("index " + this.index);
})
}
ngOnDestroy() {
this.currentIndex.unsubscribe();
}
}
Родитель:
import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';
import {Page} from "ui/page";
import {ChildComponent} from '/components/child/child.component'
@Component({
selector: "parent",
template: "<child [index]="index"></child>",
directives: [ChildComponent]
})
export class ParentComponent implements OnInit {
index: string = "0,1";
constructor(private page: Page) {
}
}
Прежде всего, шаблон 'ParentComponent' должен быть' template', а не 'templateUrl'. Кроме того, вы можете показать шаблон для 'ChildComponent'? – acdcjunior
Эй, да, это просто из редактирования, который я сделал. в шаблоне «ChildComponent» нет ничего важного. Я не использую это значение в самом представлении. – bnussey
'index' в' ParentComponent' ** - это 'string' **, а' ChildComponent' ожидает, что это будет 'Observable'. Так вы их используете? –
acdcjunior