[解決済み] selectタグのngModelの変更を検出する方法(Angular 2)?
2022-05-13 18:31:23
質問
の変更を検出しようとしています。
ngModel
にある
<select>
タグを使用します。Angular 1.xでは、これを解決するために
$watch
の上に
ngModel
を使用するか、または
ngChange
への変更を検出する方法はまだ理解していません。
ngModel
の変更を検出する方法はまだ理解していません。
完全な例 : http://plnkr.co/edit/9c9oKH1tjDDb67zdKmr9?p=info
import {Component, View, Input, } from 'angular2/core';
import {FORM_DIRECTIVES} from 'angular2/common';
@Component({
selector: 'my-dropdown'
})
@View({
directives: [FORM_DIRECTIVES],
template: `
<select [ngModel]="selection" (ngModelChange)="onChange($event, selection)" >
<option *ngFor="#option of options">{{option}}</option>
</select>
{{selection}}
`
})
export class MyDropdown {
@Input() options;
selection = 'Dog';
ngOnInit() {
console.log('These were the options passed in: ' + this.options);
}
onChange(event) {
if (this.selection === event) return;
this.selection = event;
console.log(this.selection);
}
}
見ての通り、もしドロップダウンから別の値を選択すると、私たちの
ngModel
は変化し、ビューの補間された式はこれを反映します。
この変更をクラス/コントローラで通知するにはどうしたらよいでしょうか?
どのように解決するのですか?
更新 :
イベントとプロパティのバインディングを分離する。
<select [ngModel]="selectedItem" (ngModelChange)="onChange($event)">
onChange(newValue) {
console.log(newValue);
this.selectedItem = newValue; // don't forget to update the model here
// ... do other stuff here ...
}
を使うこともできます。
<select [(ngModel)]="selectedItem" (ngModelChange)="onChange($event)">
とすれば、イベントハンドラでモデルを更新する必要がなくなりますが、これだと2つのイベントが発生するので、おそらく効率が悪くなると思います。
古い回答ですが、ベータ.1でバグを修正する前のものです。
ローカルテンプレート変数を作成し
(change)
イベントを追加します。
<select [(ngModel)]="selectedItem" #item (change)="onChange(item.value)">
関連
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] jQueryで名前を指定して要素を選択するには?
-
[解決済み] Angularで@Input()の値が変更されたときに検出する方法は?
-
[解決済み】Angularでルート変更を検出する方法は?
-
[解決済み] WebP サポートの検出
-
[解決済み] AngularJsでng-repeatを使用してフィルタリング(キー、値)を行うには?
-
[解決済み] マウスオーバー時のマウスカーソルをアンカーのようなスタイルに変更する
-
[解決済み] AngularJS - $http.postがJSONの代わりにリクエストパラメータを送信する方法はありますか?
-
[解決済み] JavaScriptでユーザーのローカルLANのIPアドレスを取得できるか?
最新
-
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 2の "select "で新しい選択範囲を取得するにはどうすればよいですか?
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] 文字列の最後の文字を取得するにはどうすればよいですか?重複
-
[解決済み] 料金制限のあるAPIを独自にDogfoodする
-
[解決済み] Bootstrap モーダル:トグル時に背景がトップにジャンプする
-
[解決済み] Javascript 確認ポップアップの「OK」「キャンセル」の代わりに「はい」「いいえ」ボタン
-
[解決済み] React Router v4 <NavLink>と<Link>の違いについて
-
[解決済み] AngularJsでng-repeatを使用してフィルタリング(キー、値)を行うには?
-
[解決済み] AngularJS - $http.postがJSONの代わりにリクエストパラメータを送信する方法はありますか?