Angularjs как установить значение по умолчанию для выбора

У меня есть следующий объект:

defaults = {
0 : {
    id : 10,
    value : "string 1"
    },
1 : {
    id : 22,
    value : "string 2"
    }
}

Я хочу перебрать этот объект и отобразить его как поле выбора.

<select ng-model="selectedValue" ng-options="obj.id as obj.value for obj in defaults">
   <option value="">---Select option-----</option>
</select>

Я пытаюсь выбрать по умолчанию «строку 2». Но это не работает. У меня проблема заключается в том, что selectedValue представляет собой строку:

$scope.selectedValue = "string 2";

Из того, что я узнал из документации, selectedValue должен быть тем же объектом. Но, к сожалению, это невозможно. В моем случае selectedValue должен быть строкой. Другими словами, мне нужно работать только с именем опции, меня не волнует id. Я пробовал использовать ng-repeat. Он даже работает, но отображает пустую опцию, и я не думаю, что использование ng-repeat - хороший способ сделать это.

Любой совет будет очень признателен.


person Sray    schedule 27.04.2014    source источник
comment
Если вы хотите, чтобы selectedValue содержал значение, а не идентификатор, вам следует использовать не obj.id as obj.value, а obj.value as obj.value   -  person JB Nizet    schedule 27.04.2014
comment
Большое спасибо. Именно то, что мне нужно. Пожалуйста, повторно отправьте свой комментарий в качестве ответа. Я приму это.   -  person Sray    schedule 27.04.2014
comment
Вам нужен весь объект выбранной опции или только строковое значение?   -  person tasseKATT    schedule 27.04.2014


Ответы (4)


Если вы хотите, чтобы переменная selectedValue содержала значение, а не идентификатор, вам следует использовать не obj.id as obj.value, а obj.value as obj.value.

person JB Nizet    schedule 27.04.2014

Выбранное значение должно быть id;

 $scope.selectedValue = 22;

См. Демо

РЕДАКТИРОВАТЬ:

изменить шаблон

 <select ng-model="selectedValue" >
   <option value="">---Select option-----</option>
   <option ng-selected="selectedValue == obj.value" value="{{obj.value}}" ng-repeat="obj in defaults">{{obj.value}}</option>
 </select>

см. обновленную демонстрацию

person Nitish Kumar    schedule 27.04.2014
comment
Пожалуйста, см. Меня выше. selectedValue всегда является строкой. Вот как работает api, и у меня нет возможности его изменить. Он возвращает только название выбранной опции, например. строка 2 и список опций. - person Sray; 27.04.2014
comment
по умолчанию это объект или массив? - person Nitish Kumar; 27.04.2014
comment
По умолчанию - это объект. - person Sray; 27.04.2014
comment
есть ли поле выбора рендеринга по умолчанию? - person Nitish Kumar; 27.04.2014
comment
Да, точно. Я признаю, что это может быть достаточно странно, и, возможно, api будет изменен позже (я не реагирую на это), но сейчас это должно работать таким образом. - person Sray; 27.04.2014
comment
@ user3174320 Примите ответ, если вы выбрали именно это решение. - person callmekatootie; 27.04.2014

Я думаю, вы неправильно истолковали документацию.

Выбранное значение должно относиться к значению того же объекта, а не быть самим объектом.

Таким образом, вы можете установить значение по умолчанию как:

$scope.selectedValue = $scope.defaults[1].value;

Таким образом, будет установлено значение по умолчанию - не имеет значения, является ли значение строкой или числом.

person callmekatootie    schedule 27.04.2014
comment
Пожалуйста, смотрите мои комментарии к ответу выше. Я не могу установить selectedValue. selectedValue - это всегда строка, возвращаемая API. defaults - это объект, возвращаемый ip. Таким образом, сравнение должно производиться по значению, а не по идентификатору. - person Sray; 27.04.2014
comment
@ user3174320 Значение по умолчанию не работает. Что вам нужно сделать, так это после того, как API вернет строку, перебрать свойства объекта default и, когда значение совпадает, присвоить это значение свойства selectedValue. Не прикрепляйте значение, возвращаемое API, напрямую к selectedValue - person callmekatootie; 27.04.2014

Если вы используете ng-repeat с параметрами, вам нужно использовать on-last-repeat в теге параметров. Например, select name = "repeatSelect" id = "repeatSelect" ng-model = "usertypes.SelectedId"

option ng-repeat = "option in usertypes.AvailableOptions" value = "{{option.Id}}" ng-selected = "option.Id === usertypes.SelectedId" on-last-repeat> {{option.Name} }

Выбрать

person Community    schedule 13.09.2016