ng-options Значение по умолчанию для углового раскрывающегося списка
У меня есть два выпадающих списка, один зависит от другого. У меня изначально был код, использующий ng-repeat, но я читал, что более эффективно использовать ng-options. Однако при переключении я больше не могу использовать ng-selected для значения по умолчанию.
Я смотрел на различные методы установки опции по умолчанию в ng-options, но они используют либо <option value="">Select Something Here</option>
для индивидуального варианта или выбора прямо из набора данных. Однако моя ценность будет меняться.
Вот плункер, который по умолчанию не использует ng-option:
http://plnkr.co/edit/VwqrsR38GOFubW8i46FJ?p=preview
У меня контроллер вот так:
<select ng-model="defcom"
ng-options="opt as opt.DefCom for opt in acct_info | filter:{Req:'MUST'}:true" >
</select>
<p>Hello {{ defcom.AcctName }}</p>
и пример моих данных:
$scope.acct_info = [
{
"Req": "MUST",
"DefCom": "1",
"AcctName": "ThisName"
},
{
"Req": "NoMUST",
"DefCom": "5",
"AcctName": "ThisName2"
},
{
"Req": "MUST",
"DefCom": "4",
"AcctName": "ThisName3"
},
{
"Req": "MUST",
"DefCom": "7",
"AcctName": "ThisName4"
}
];
У меня было это работает, когда я использовал ng-options="opt.DefCom as opt.DefCom for opt in acct_info | filter:{Req:'MUST'}:true"
как видно здесь: http://plnkr.co/edit/vyJuZDM7OvE5knsfHln7?p=preview но я изменил его, чтобы получить связанные привязки. Если у кого-то есть понимание того, как работает ng-options, это было бы очень полезно.
1 ответ
ng-options="opt as opt.DefCom for opt in acct_info | filter:{Req:'MUST'}:true"
Значение привязано к ng-model="defcom"
будет целый объект opt
, Чтобы установить значение по умолчанию, вам нужно назначить весь объект $scope.defcom
, например $scope.defCom = $scope.acct_info[2];
С вашими текущими данными, это сделает по умолчанию
{
"Req": "MUST",
"DefCom": "4",
"AcctName": "ThisName3"
}
Конечно, вы не всегда знаете, какими будут ваши данные, поэтому вы можете написать некоторые функции для получения учетных записей или клиентов по одному из их свойств.
$scope.defcom = getAccountByDefCom("4");
$scope.defcust = getCustomer("3");
function getAccountByDefCom(defcom) {
for (var i = 0; i < $scope.acct_info.length; i++) {
if ($scope.acct_info[i].DefCom === defcom) {
return $scope.acct_info[i];
}
}
}
function getCustomer(number) {
for (var i = 0; i < $scope.cust_info.length; i++) {
if ($scope.cust_info[i].Customer === number) {
return $scope.cust_info[i];
}
}
}
Просмотр раздела " Аргументы " документации может помочь