[解決済み】Angular 2 要素の表示と非表示について
2022-04-11 07:36:53
質問
Angular 2で、ブーリアン変数に依存して要素を隠したり表示したりするのに問題があります。
これは、divの表示と非表示のためのコードです。
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
という変数は "edited" で、私のコンポーネントに格納されています。
export class AppComponent implements OnInit{
(...)
public edited = false;
(...)
saveTodos(): void {
//show box msg
this.edited = true;
//wait 3 Seconds and hide
setTimeout(function() {
this.edited = false;
console.log(this.edited);
}, 3000);
}
}
saveTodos関数が起動すると要素が表示され、3秒後に変数がfalseに戻っても要素は非表示になりません。なぜでしょうか?
どうすればいいですか?
ngIfディレクティブを使用する必要があります。
<div *ngIf="edited" class="alert alert-success box-msg" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
export class AppComponent implements OnInit{
(...)
public edited = false;
(...)
saveTodos(): void {
//show box msg
this.edited = true;
//wait 3 Seconds and hide
setTimeout(function() {
this.edited = false;
console.log(this.edited);
}.bind(this), 3000);
}
}
更新:Timeoutコールバックの内部にいるとき、外部スコープへの参照が欠落しています。
ということで、上記で追加したように .bind(this) を追加します。
Q : editedはグローバル変数です。ngFor-loopの中でどのようなアプローチをとるのでしょうか?- Blauhirn
A : 私なら、反復処理するオブジェクトにプロパティとしてeditを追加します。
<div *ngFor="let obj of listOfObjects" *ngIf="obj.edited" class="alert alert-success box-msg" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
export class AppComponent implements OnInit{
public listOfObjects = [
{
name : 'obj - 1',
edit : false
},
{
name : 'obj - 2',
edit : false
},
{
name : 'obj - 2',
edit : false
}
];
saveTodos(): void {
//show box msg
this.edited = true;
//wait 3 Seconds and hide
setTimeout(function() {
this.edited = false;
console.log(this.edited);
}.bind(this), 3000);
}
}
関連
-
[解決済み】Typescript: スプレッド型はオブジェクト型からしか作成できない
-
[解決済み】プロパティ 'value' が 'HTMLElement' 型の値に存在しない。
-
[解決済み] サービスにDocumentを挿入する方法は?
-
[解決済み] コンストラクタとngOnInitの違いについて
-
[解決済み] Angular HTMLバインディング
-
[解決済み] Angular:*ngClassを使った条件付きクラス
-
[解決済み] モジュール "@angular-devkit/build-angular" が見つかりませんでした。
-
[解決済み] コンポーネントテンプレートで要素を選択するには?
-
[解決済み] Angularでselect要素をオブジェクトにバインドする
-
[解決済み】PromiseとObservablesの違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Typescript : require文はimport文の一部ではない
-
[解決済み] TypeScript - Angular: 複数行の文字列
-
[解決済み] TypeScriptでオブジェクトを初期化する方法
-
[解決済み] Angular 2+でngShowとngHideに相当するものは何ですか?
-
[解決済み] オプションのパラメータを省略しながら、他のオプションのパラメータを渡すには?
-
[解決済み] String型とstring型の違いは何ですか?
-
[解決済み] チェックした後に○○の表現が変わっている
-
[解決済み】「エラー TS2533: オブジェクトは 'null' または 'undefined' の可能性があります」を抑制する方法とは?
-
[解決済み】TypescriptのArray<Type> VS Type[]について
-
[解決済み】Typescriptのパラメータ名のクエスチョンマークとは?