[解決済み] Angular 2の子コンポーネントから親コンポーネントのプロパティを更新する
2023-04-07 21:17:18
質問
私は
@input
を使って親コンポーネントからプロパティを受け取り、子コンポーネントの要素で CSS クラスをアクティブにしています。
親からプロパティを受け取り、クラスをアクティブにすることができます。しかし、これは一度しか動作しません。親から受け取っているプロパティはbooleanデータ型であり、私がその状態を
false
に設定しても、親コンポーネントでは変更されません。
Plunkr: https://plnkr.co/edit/58xuZ1uzvToPhPtOING2?p=preview
app.ts
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import { HeaderComponent } from './header';
import { SearchComponent } from './header/search';
@Component({
selector: 'my-app',
template: `
<app-header></app-header>
`,
})
export class App {
name:string;
constructor() {
}
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App, HeaderComponent, SearchComponent ],
bootstrap: [ App ]
})
export class AppModule {}
header.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-header',
template: `<header>
<app-search [getSearchStatus]="isSearchActive"></app-search>
<button (click)="handleSearch()">Open Search</button>
</header>`
})
export class HeaderComponent implements OnInit {
isSearchActive = false;
handleSearch() {
this.isSearchActive = true
console.log(this.isSearchActive)
}
constructor() { }
ngOnInit() { }
}
ヘッダ/search.ts
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-search',
template: `<div id="search" [class.toggled]="getSearchStatus">
search
<button (click)="getSearchStatus = false" class="close">Close Search</button>
</div>`
})
export class SearchComponent implements OnInit {
@Input() getSearchStatus: boolean;
constructor() { }
ngOnInit() {
}
}
上記のプランカーをご確認ください。検索を開く機能は一度だけ動作します。検索を閉じた後、再び発動することはありません。
は
@input
はこのシナリオのための適切なユースケースですか?これを修正するのを助けてください。(プランカーを更新してください)。
どのように解決するのですか?
2Wayデータバインディングを使用する必要があります。
@Input()
は1方向のデータバインディングです。
2 ウェイのデータバインディングを有効にするには
@Output()
を追加する必要があります。
@Input() getSearchStatus: boolean;
@Output() getSearchStatusChange = new EventEmitter<boolean>();
で、自分のプロパティに加えられた変更を親に公開したい場合、親に通知する必要があります。
this.getSearchStatusChange.emit(newValue)
で、親ではそのプロパティをバナナインアボックス記法で記述する必要があります。
[(getSearchStatus)]="myBoundProperty"
を使用すると、プロパティにバインドして、子プロパティが変更されたときにコールバックを起動することもできます。
[getSearchStatus]="myBoundProperty" (getSearchStatusChange)="myCrazyCallback($event)"
を参照してください。 plnkr
関連
-
[解決済み] Angular 2の@ViewChildアノテーションがundefinedを返す
-
[解決済み] ng serve がファイルの変更を自動的に検出しない
-
[解決済み] 文字列|ヌル'型の引数は、文字列'型のパラメータに代入できません。タイプ 'null' はタイプ 'string' に割り当てられません。
-
[解決済み] Error: モジュールによってインポートされた予期しない値 'undefined'。
-
[解決済み] Reactive Forms - フィールドをタッチしたものとしてマークする
-
[解決済み] Angular2 DIRECTIVEは要素の既知のプロパティではないので、バインドできません。
-
[解決済み] Angularで確認ダイアログを作る簡単な方法?
-
[解決済み] Angular2 Tutorial (Tour of Heroes)です。モジュール 'angular2-in-memory-web-api' を見つけることができません。
-
[解決済み] Angular 2+でspec.tsファイルなしでComponentを生成する。
-
[解決済み] Angular2 ルーターがクエリ文字列を保持する
最新
-
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-cliのビルドでカスタムファイルをインクルードするには?
-
[解決済み] angular-cliのパラメータ --base-href と --deploy-url の違いは何ですか?
-
[解決済み] 別のプロセス(id #######)が現在 ngcc を実行しています。
-
[解決済み] .tsファイルはTypeScriptのコンパイルの一部ですが、使用されていませんという警告を消すには?
-
[解決済み] 遅延のあるobservableを作成するには?
-
[解決済み] angular-cli が HTTPS で ng serve するようにする。
-
[解決済み] angularで1つの要素に複数のテンプレートバインディングを適用する方法 [重複].
-
[解決済み] ActivatedRoute(paramsなど)のobservableの購読を解除しなければならないのでしょうか?
-
[解決済み] Angular 2でコンポーネントの静的変数をHTMLにバインドする方法は?
-
[解決済み] Angular 2 コンポーネントコンストラクタとOnInitの比較 [重複]。