[解決済み] ルーターアウトレットの子コンポーネントへのデータの渡し方
2022-05-16 06:08:53
質問
サーバーにアクセスしてオブジェクトを取得する親コンポーネントを持っています。
// parent component
@Component({
selector : 'node-display',
template : `
<router-outlet [node]="node"></router-outlet>
`
})
export class NodeDisplayComponent implements OnInit {
node: Node;
ngOnInit(): void {
this.nodeService.getNode(path)
.subscribe(
node => {
this.node = node;
},
err => {
console.log(err);
}
);
}
そして、いくつかの子供たちのディスプレイの一つで。
export class ChildDisplay implements OnInit{
@Input()
node: Node;
ngOnInit(): void {
console.log(this.node);
}
}
にデータを注入することはできないようです。
router-outlet
. ウェブコンソールでエラーが出るようです。
Can't bind to 'node' since it isn't a known property of 'router-outlet'.
これはなんとなくわかるのですが、次のようにするとどうでしょう。
- 親コンポーネント内で、サーバーから "node" データを取得する。 コンポーネント内から、サーバーから "ノード" データを取得しますか。
- サーバーから取得したデータを、子ルーター・アウトレットに渡しますか?
のようには見えません。
router-outlets
は同じように動作するようです。
どのように解決するのですか?
<router-outlet [node]="..."></router-outlet>
は単に無効です。ルータによって追加されたコンポーネントは、兄弟として
<router-outlet>
の兄弟として追加され、それを置き換えるものではありません。
参照 https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service
@Injectable()
export class NodeService {
private node:Subject<Node> = new BehaviorSubject<Node>([]);
get node$(){
return this.node.asObservable().filter(node => !!node);
}
addNode(data:Node) {
this.node.next(data);
}
}
@Component({
selector : 'node-display',
providers: [NodeService],
template : `
<router-outlet></router-outlet>
`
})
export class NodeDisplayComponent implements OnInit {
constructor(private nodeService:NodeService) {}
node: Node;
ngOnInit(): void {
this.nodeService.getNode(path)
.subscribe(
node => {
this.nodeService.addNode(node);
},
err => {
console.log(err);
}
);
}
}
export class ChildDisplay implements OnInit{
constructor(nodeService:NodeService) {
nodeService.node$.subscribe(n => this.node = n);
}
}
関連
-
Node Sass は現在の環境のためのバインディングを見つけることができませんでした。Windows 64ビット、Node.js 8.x。
-
[解決済み] NgModuleにおける宣言、プロバイダ、インポートの違いは何ですか?
-
[解決済み] Angular 2のキープレスごとの変更イベント
-
[解決済み] Angular2の括弧、括弧、アスタリスクの違いは何ですか?
-
[解決済み] Angular CLI Error: serveコマンドはAngularプロジェクトで実行する必要がありますが、プロジェクト定義が見つかりませんでした。
-
[解決済み] NgModule.schemasにCUSTOM_ELEMENTS_SCHEMAを追加してもエラーが表示される。
-
[解決済み] テンプレート内の *ngIf else if
-
[解決済み] Angular 2の無効化されたコントロールがform.valueに含まれない
-
[解決済み] イベントリスナーを動的に追加する
-
[解決済み] Angular 2でシングルトンサービスを作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angularで変更検知を手動でトリガーする
-
[解決済み] Angularのエラーです。"Can't bind to 'ngModel' because it isn't a known property of 'input'"."
-
[解決済み】Angularでルーティングパスを通してデータを送信する
-
[解決済み] Angular 2.0のルーターがブラウザーの再読み込みで動作しない件
-
[解決済み] Angular 6 素材マットセレクトの変更方法が削除されました。
-
[解決済み] viewchildを使用して複数のviewchildrenにアクセスする
-
[解決済み] AngularプロジェクトでBootstrapを使うには?
-
[解決済み] Angular 2 http.post()がリクエストを送信しない
-
[解決済み] エラーが発生しました。出力が初期化されていません
-
[解決済み] イベントリスナーを動的に追加する