親コンポーネントに私は、サーバーに格納されたAPIのリストを持って、私が作成したパスデータ子コンポーネントからAngular4
apis = {
"Repo Assignment": "https://apis.repoAssignment",
"Status Summary": "https://apis.statsSummary",
...
}
子コンポーネントがドロップダウンメニュー:TitleDropdownComponentの子コンポーネントを、 "Repo Assignment" ...私の親コンポーネントでは、子コンポーネントから選択されたタイトルに基づいて異なるデータテーブルをレンダリングしたかったのです。
今、私は正常に子コンポーネントからタイトルを取得し、親コンポーネントのコンソールでそれらを表示できます。ただし、ngOnInit()では、同じ変数を変更することはできません。タイトルのために常に同じAPIデータを取得します。変数は変更されません。 ngOnInitのタイトル変数を変更する方法やngOnChangesのように他の方法を使用する方法はありますか?下記の親アプリコンポーネントをご覧ください。ありがとうございました!
import { Component, Input, EventEmitter, Output, ViewChild, OnInit } from '@angular/core';
import { ServerGetData } from './server.getData';
import { TitleDropdownComponent } from './TitleDropdown/titleDropdown.component'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent implements OnInit {
// make ajax call from ServerGetData
constructor(private dataService: ServerGetData) {}
data = {};
// get Child component variables
@ViewChild(TitleDropdownComponent)
private titleComponent: TitleDropdownComponent;
onSelected(selected: string) {
// default child component title is "Repo Assignment", in here overwrite
// titleComponent.title to be selected title
this.titleComponent.title = selected;
// each time can the selected title can be printed in console
console.log(this.titleComponent.title);
return this.titleComponent.title;
}
ngOnInit(): void {
// *** No idea why in here this.titleComponent.title is not able to change accordingly and always is default title: "Repo Assignment" ***
this.dataService.getData(this.titleComponent.title).subscribe(
(data) => {
this.data = data.items;
}
);
};
}
こんにちは@DeborahK、ありがとうございます!できます。しかし、データを上書きすることはできません。つまり、取得したデータがngOninitとonSelectedの両方であることを意味します。何らかの方法で、私はonOnInitを1回だけ実行する必要があります。データソースはonSelected()ですか? –
ありがとう!私はそれを理解したと思う。 onSelected()の順序をngOnInit()の下に変更しました。 –