2016-09-09 5 views
0
$scope.items = [{ 
    id: 1, 
    label: 'aLabel', 
    subItem: { name: 'aSubItem' } 
}, { 
    id: 2, 
    label: 'bLabel', 
    subItem: { name: 'bSubItem' } 
}]; 

は、私が通常使用するものです。キーワードとは何ですか?キーワードの "as"とは何ですか?以下、上記のリストに基づいて

<select ng-options="item in items" ng-model="selected"></select> 

非常に簡単、のように、私はitem.xxx

を使用して値にアクセスすることができます。しかし、以下の構文は何です:

<select ng-options="item as item.label for item in items" ng-model="selected"></select> 

asforのキーワードはまったくぼやけていますか?私は本当にこれを説明する文書を見つけることができなかった、助けてください。

PS: 元の構文は<select ng-options="item as item.label for item in items track by item.id" ng-model="selected"></select>ですが、私はtrack byを削除しました。これは、ドキュメントから読んだことで分かります。

+0

参考これらのリンクは、それが役立つことがありますのhttp:// stackoverflow.com/questions/12139152/how-to-set-the-value-property-in-angularjs-ng-options http://stackoverflow.com/questions/13047923/working-with-select-using-angulars-ng -options/130497 40#13049740 – Dil85

答えて

1

はここ<select>は、オプションを設定するために参照すべきオプションの一覧です。あなたはng-options="item as item.label for item in items"書くとき

$scope.items = [{ 
    id: 1, 
    label: 'aLabel', 
    subItem: { name: 'aSubItem' } 
}, { 
    id: 2, 
    label: 'bLabel', 
    subItem: { name: 'bSubItem' } 
}]; 

、あなたは、各項目がitem in itemsを使用してitemに割り当てられているitems、を反復処理しています。

だから、第一の反復のために、itemの値は次のようになります。

{ 
    id: 1, 
    label: 'aLabel', 
    subItem: { name: 'aSubItem' } 
} 

item、この場合には対象であること。

<option>どのようにデータを取得しているか気にせず、表示する必要があるものだけを気にして、選択時にどの値を割り当てるかを指定します。したがって、itemを入力とし、対応する<option>要素を生成するforを使用してng-optionsと伝えます。

選択オプションで、入力をidにしたいとします。しかし、あなたのidの意味が分かっている人は、人間の読み方がわかります。この場合はlabelという意味のメッセージを表示したいでしょう。

オブジェクト全体を使用する代わりに、idのみを使用し、labelを使用してドロップダウンリストに表示するテキストを使用します。 今すぐにあなたのコードの変更:

ng-options="item.id as item.label for item in items"

だから、最終的にはHTMLはこのようなものになり、生成:

<select> 
 
    <option value="1">aLabel</option> 
 
    <option value="2">bLabel</option> 
 
</select>

+0

要するに、 'as'の前には' option'の値があり、 'as'の後はラベルの内容です。しかし、私はanglejsのウェブサイト(https://docs.angularjs.org/api/ng/directive/ngOptions)からコードをコピーしましたが、 'item.id'の代わりに' item'を 'as'の前に使用していますが、' item .id'あなたの説明に基づいてより意味をなさない。なぜ彼らは 'item'を使用していますか?それはどういう意味ですか? 'item'を使うと、オプションの値は何になりますか? – GMsoF

+0

@GMsoFオブジェクトから 'id'だけをピックするのではなく、オブジェクト全体を選択しています。つまり、 'item'を使うとオブジェクト全体を選択します。私はあなたがこれをより良く理解するのを助けるために、plunk(https://plnkr.co/edit/pnJj4OND10enP2fXwLxq?p=preview)を作成しました。 –

+0

私は見る!以前は、オブジェクト全体を選択する理由を理解できませんでした。なぜなら、 'option'の値は文字列の値でなければならないからです。今私はその目的が 'select 'ng-model'と一緒に使うのかどうかを知っています。それは意味がありますが、ほとんどの場合、値をサーバに提出したいのですが、' select as object'は役に立たないでしょう。 – GMsoF

0

<select ng-options="item as item.label for item in items" ng-model="selected"></select>で公式ドキュメントを見つけることができますが、ここで <select ng-options="item in items" ng-model="selected"></select>

しかし、最初のものはフレームワーク

に多くの明快さを与えていると機能的にほぼ同様ですitem as item.label for item in items,

「として」:item as item.labelは、selectタグのショーのオプションでitem.labelしかしitem.label全体対象項目を表すことを語っています。これは「の」オプションは、DOMでのみitem.labelを示しているにもかかわらず、他のプロパティ(ID、サブタイプなど)がng-model(または選択オプション)を使用してもアクセス可能であることを

を意味しますここfor item in items言及するときので来ますitem as item.label DOMはこれが何であるか分かりませんitemです。だから、これは明らかにitem.labelの声明でitemオブジェクト配列$scope.itemsobjectであると言っている(または単にDOMの用語でitmes)

関連する問題