md-select
次のように設定します。
<md-select placeholder="Category" ng-model="current.Category" flex >
<md-option ng-repeat="item in categories" ng-value="{{item}}">{{item.Name}}</md-option>
</md-select>
@scope.categories
値は
[
{
"Name":"Commercial & Industrial",
"ParentId":null,
"Categories":[
{
"Name":"Deceptive Marketing",
"ParentId":19,
"Categories":[
],
"Id":24,
"ModifiedDate":"2015-08-06T07:49:53.0489545",
"CreatedDate":"2015-08-06T15:49:51.707"
},
{
"Name":"Aggressive Agents",
"ParentId":19,
"Categories":[
],
"Id":25,
"ModifiedDate":"2015-08-06T07:50:10.0026497",
"CreatedDate":"2015-08-06T15:50:08.63"
}
],
"Id":19,
"ModifiedDate":"08/06/2015 @ 7:49AM",
"CreatedDate":"08/06/2015 @ 3:49PM"
},
{
"Name":"Competitive Supply",
"ParentId":null,
"Categories":[
{
"Name":"Security Deposit",
"ParentId":20,
"Categories":[
],
"Id":21,
"ModifiedDate":"2015-08-06T07:49:30.3966895",
"CreatedDate":"2015-08-06T15:49:25.8"
},
{
"Name":"Meter",
"ParentId":20,
"Categories":[
],
"Id":22,
"ModifiedDate":"2015-08-06T07:49:34.6571155",
"CreatedDate":"2015-08-06T15:49:33.3"
},
{
"Name":"Bill",
"ParentId":20,
"Categories":[
],
"Id":23,
"ModifiedDate":"2015-08-06T07:49:41.7268224",
"CreatedDate":"2015-08-06T15:49:40.357"
}
],
"Id":20,
"ModifiedDate":"08/06/2015 @ 7:49AM",
"CreatedDate":"08/06/2015 @ 3:49PM"
}
]
md-select
正常に動作します。しかし、私が理解できないのは、選択値を設定する方法です。モデルを設定しようとするとcurrent.Category
から$scope.categories
設定されません。
ドキュメントは明示的ではありませんが、ng-selected
を使用する必要があります。説明のために codepen を作成しましたが、基本的には:
<md-option ng-repeat="(index,item) in categories" ng-value="{{item}}"
ng-selected="index == 1">
{{item.Name}}
</md-option>
これにより、2番目のカテゴリ(カテゴリ配列のインデックス1)が選択されます。
ng-model-options、trackByを使用して、セレクターとしての一意のモデルフィールド:
<md-select placeholder="Category"
ng-model="current.Category"
ng-model-options="{trackBy: '$value.Id' }" // <-- unique field 'Id'
flex >
<md-option
ng-repeat="item in categories"
ng-value="{{item}}">{{item.Name}}</md-option>
</md-select>
このソリューションについては、Angular Material's official documentation で説明されています。
selectのデフォルト値を設定するには、ng-selectedおよびng-modelを使用できます
<md-select ng-model="vmIdPage.number">
<md-option ng-value="mod" ng-repeat="mod in vmIdPage.initObject.listeModaliteMisePlace" ng-selected="{{ mod.id === vmIdPage.number.id ? 'true' : 'false' }}">
{{mod.libelle}}
</md-option>
</md-select>
ドロップダウンの最初の値をデフォルトにしたい場合、このソリューションは簡単です。
使用 ng-select="$first"
。これにより、ドロップダウンはデフォルトで最初の値になります。
<md-select placeholder="Categories" ng-model="current.category">
<md-option ng-repeat="(index, item) in categories" value="{{item}}"
ng-selected="$first">{{item.Name}}</md-option>
</md-select>
以下に示すのは CodePen です。
私の場合、初期値が設定されていないため、 docs で説明されているng-model-options="{trackBy: '$value.id'}"
の追加は機能しませんでした。
コントローラーでモデルを希望のデフォルト値に明示的に設定することにより、必要に応じて値を適切に設定します。このアプローチは、事前選択された(ng-selected
を使用して)表示する要素のインデックスを事前に知らない方が簡単かもしれません。もちろん、コントローラーで評価することもできますが、私には、ターゲット要素をモデルに直接設定する方がより迅速に思えます。
表示:
<div class="input-style-border">
<md-select ng-model="vm.selectedGlobalFilter">
<md-option ng-value="item" ng-repeat="item in vm.globalFilterValues">
{{item.value}}
</md-option>
</md-select>
</div>
コントローラー:
function initialize() {
vm.globalFilterValues = globalFilterValues;
vm.selectedGlobalFilter = TransferGlobalFilter.Worldwide;
}
GlobalFilterValuesの形式は次のとおりです。
[
{key:"All", value:"All values" },
{key:"Manager", value:"Manager"},
{key:"HR", value:"Human resources"},
]
Ng-valueの代わりにng-optionの値を使用します