[解決済み] Angularでselect要素をオブジェクトにバインドする
質問
select要素にオブジェクトのリストを結合したいのですが、これは簡単なことです。
@Component({
selector: 'myApp',
template:
`<h1>My Application</h1>
<select [(ngModel)]="selectedValue">
<option *ngFor="#c of countries" value="c.id">{{c.name}}</option>
</select>`
})
export class AppComponent{
countries = [
{id: 1, name: "United States"},
{id: 2, name: "Australia"}
{id: 3, name: "Canada"},
{id: 4, name: "Brazil"},
{id: 5, name: "England"}
];
selectedValue = null;
}
この場合、以下のように表示されます。
selectedValue
は数字、つまり選択されたアイテムのIDになります。
しかし、実際には、国オブジェクト自体にバインドして
selectedValue
は単なるidではなく、オブジェクトです。 オプションの値をこんな風に変えてみました。
<option *ngFor="#c of countries" value="c">{{c.name}}</option>
が、これはうまくいかないようです。 オブジェクトを
selectedValue
-- しかし、私が期待しているようなオブジェクトではありません。 あなたは
Plunkerの例では、次のようになります。
.
しかし、バインドされた ngModel が更新される前に change イベントが発生するようです - つまり、その時点で新しく選択された値にアクセスすることができないのです。
Angular 2でselect要素をオブジェクトにバインドするきれいな方法はありますか?
どのように解決するのですか?
<h1>My Application</h1>
<select [(ngModel)]="selectedValue">
<option *ngFor="let c of countries" [ngValue]="c">{{c.name}}</option>
</select>
注意:この場合
[ngValue]="c"
の代わりに
[ngValue]="c.id"
ここで、c は完全な国名オブジェクトです。
[value]="..."
は文字列値のみをサポートします。
[ngValue]="..."
は任意の型をサポートします。
更新
もし
value
がオブジェクトの場合、事前に選択されたインスタンスはいずれかの値と同一である必要があります。
最近追加されたカスタム比較も参照してください。 https://github.com/angular/angular/issues/13268 4.0.0-beta.7から使用可能です。
<select [compareWith]="compareFn" ...
にアクセスしたい場合に気をつけること。
this
内の
compareFn
.
compareFn = this._compareFn.bind(this);
// or
// compareFn = (a, b) => this._compareFn(a, b);
_compareFn(a, b) {
// Handle compare logic (eg check if unique ids are the same)
return a.id === b.id;
}
関連
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] CSS - カーソルを置いたときに塗りつぶしの色を変更する - SVG PATH
-
[解決済み] 要素を水平方向にセンタリングする方法
-
[解決済み] セレクトボックスのプレースホルダーを作成するにはどうすればよいですか?
-
[解決済み] How can I set the default value for an HTML <select> element?
-
[解決済み] How do I style a <select> dropdown with only CSS?
-
[解決済み] jQueryで名前を指定して要素を選択するには?
-
[解決済み] divの内容を下に揃える方法
-
[解決済み] Angular HTMLバインディング
-
[解決済み] 検索エンジンはAngularJSアプリケーションをどのように扱っているのか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Webフォームのフィールド/入力タグでブラウザのオートコンプリートを無効にするにはどうすればよいですか?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] クリック可能なラベルを持つチェックボックスを作成するには?
-
[解決済み] mailto:を使ってメールの件名や内容を設定することはできますか?
-
[解決済み] hr要素の色を変更する
-
[解決済み] フレックスアイテムを右寄せにするには?
-
[解決済み] IMGとCSSのbackground-imageはいつ使い分ける?
-
[解決済み] テーブル内のテキストアラインクラス
-
[解決済み] MIME-typeが原因でスタイルシートが読み込まれない
-
[解決済み] HTML Input="file" Accept Attribute File Type (CSV)