@Input не получает данные от родительского компонента

Я только начал работать с @Input особенность Angular и все было хорошо до сих пор. Я использую Firebase в качестве базы данных, и порция данных, в которую я звоню, выглядит следующим образом

{
    "page_area_business_image"      : {
        "expand"    : {
            "intro" : "some info...",

            "title" : "a title"
        },
        "rebrand"   : {....},
        "newbrand"  : {....},
        "questions" : {
            "question01"    : {
                "id"        : "an ID",
                "name"      : "a name",
                "question"  : "a question",
                "answers"   : {
                    "answer01"  : {
                        "answer"    : "some answer",
                        "id"        : "an ID"
                    },
                    "answer02"  : {
                        "answer"    : "another answer",
                        "id"        : "an ID"
                    }
                }
            },
            "question02"    : {....},
            "question03"    : {....}
        }
    }
}

Единственная проблема, с которой я сейчас сталкиваюсь, - это заставить дочерний компонент читать questions данные, которые console.log()Отлично подходит для родительского компонента, что означает, что файл службы доставляет его. Вот как я это называю.

Родительский компонент

private busExpInformation:  FirebaseObjectObservable<any>;

private busImageO:          FirebaseObjectObservable<any>;
private busImageQuesO:      FirebaseObjectObservable<any>;



constructor(private _homeService: HomeService) { }



ngOnInit() {
    this._homeService.getBusExpInformation().subscribe(BusExpInformation =>{
        this.busExpInformation = BusExpInformation;
    });

    this._homeService.getBusImage().subscribe(BusImage => {
        this.busImageO = BusImage.expand;
        this.busImageQuesO = BusImage.questions;
        console.log(this.busImageQuesO); //works fine here
    });

}

Родительский шаблон

<business-image [busImageI]="busImageO" [busImageQuesI]="busImageQuesO"></business-image>

Дочерний компонент

@Input('busImageI')
busImage: FirebaseObjectObservable<any>;

@Input('busImageQuesI')
questions: FirebaseObjectObservable<any>;

ngOnInit() {
    console.log(this.questions);// doesn't return anything
}

Я даже вернулся в родительский компонент и сделал вызов для него в его собственном вызове базы данных, как это

this._homeService.getBusImage().subscribe(BusImage => {
        this.busImageQuesO = BusImage.questions;
        console.log(this.busImageQuesO);
    });

и это все еще не имеет значения в дочернем компоненте. Другой виден хорошо, как и все остальные через другие элементы, над которыми я работал.

Я видел в некоторых статьях и учебных пособиях, с которыми сталкивался, что они подчеркивают импорт и объявление дочернего компонента в родительском компоненте, но я видел другие, где они просто работают с ним, будучи объявленными в главном модуле родительском компоненте. Компонент связан с, как я его настроил. Я не знаю, имеет ли это значение или нет. Я видел другие примеры импорта нескольких @Inputи я не вижу, что я делаю по-другому.

1 ответ

Решение

Попытаться изменить ngOnInit() с ngOnChanges() в дочернем компоненте, и не забывайте соответствующие другие изменения, импортируя OnChanges и реализовать его. Для получения дополнительной информации проверьте это и это.

Другие вопросы по тегам