[解決済み] 親コンポーネントのプロパティにアクセスする
2023-07-15 03:43:55
質問
トップレベルのComponentに、HTTPソースからデータを使用するプロパティがあります。
app.ts
):
import {UserData} from './services/user-data/UserData';
Component({
selector: 'app', // <app></app>
providers: [...FORM_PROVIDERS],
directives: [...ROUTER_DIRECTIVES],
pipes: [],
template: require('./app.html')
})
@RouteConfig([
// stuff here
])
export class App {
// Please note that UserData is an Injectable Service I have written
userStatus: UserStatus;
constructor(private userData: UserData) {
this.userStatus = new UserStatus();
}
ngOnInit() {
this.userData.getUserStatus()
.subscribe(
(status) => {
this.userStatus = status; // I want to access this in my Child Components...
},
(err) => {console.log(err);},
() => {console.log("User status complete"); }
);
}
}
さて、トップレベルのComponentの直接の子である別のComponentがあり、その中で親のプロパティである''Concept''にアクセスしたいと思います。
userStatus
' にアクセスしたいのですが、以下がその子です。
Component({
selector: 'profile',
template: require('app/components/profile/profile.html'),
providers: [],
directives: [],
pipes: []
})
export class Profile implements OnInit {
constructor() {
}
ngOnInit() {
// I want to have access with the parent App Component, 'userStatus' propety here... I only want to read this property
}
}
Angular 1.xでは、これは簡単です。
$parent
を子コントローラで参照したり、(
アンチパターン警告!!!
) 私は愚かにもこのデータを
$rootScope
.
Angular 2で親にアクセスする最善の方法は何でしょうか?
どのように解決するのですか?
さまざまな方法があります。
-
グローバルサービス
-
親が共有し、子に注入されるサービス
-
と同様に
グローバルサービス
に記載されていますが
providers
またはviewProviders
の代わりに親にboostrap(...)
に変更し、親の子のみが利用できるようにしました。
-
と同様に
グローバルサービス
に記載されていますが
-
親が子にインジェクトされ、子から直接アクセスされる。
- デメリット:タイトなカップリング
export class Profile implements OnInit {
constructor(@Host() parent: App) {
parent.userStatus ...
}
- データバインディング
export class Profile implements OnInit {
@Input() userStatus:UserStatus;
...
}
<profile [userStatus]="userStatus">
関連
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み] formGroup' は 'form' の既知のプロパティではないため、バインドできません。
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] コンポーネントテンプレートで要素を選択するには?
-
[解決済み] Angularの@Directiveと@Componentの比較
-
[解決済み] TypeScript Genericsに複数の型制約を指定することは可能か?
-
[解決済み] Angular 2 カスタムフォーム入力
-
[解決済み] types/packageでインストールしたTypeScriptの型定義が正しくない場合に上書きする方法
-
[解決済み] TypeScriptでクラスを角括弧「<>」で囲むとはどういう意味ですか?
-
[解決済み] 型 'X' の引数は型 'X' のパラメータに代入できません。
最新
-
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のグローバルイベント
-
[解決済み] Typescriptでインターフェースやクラスを使用する場合 [重複].
-
[解決済み] 文字列ユニオンから文字列配列へ
-
[解決済み] グローバルスコープの拡張は、外部モジュールまたはアンビエントモジュール宣言にのみ直接ネストすることができます(2669)
-
[解決済み] Typescript でエラーをスローする関数を宣言する方法
-
[解決済み] クラス内列挙型(TypeScript定義ファイル)
-
[解決済み] Angular2 - Http POST リクエストパラメータ
-
[解決済み] TypeScriptとIterator。IterableIterator<T> 型は配列型ではありません。
-
[解決済み] TypeScript インポートパスエイリアス
-
[解決済み] 新しい Typescript 1.8.4 のビルドエラー。" ビルド。Property 'result' がタイプ 'EventTarget' に存在しません。"