AngularJS, выбор и привязка к значению

У меня есть сценарий, который я считаю логичным, но кажется, что angular его не поддерживает.

Итак, у меня есть в области/контроллере список типов пользователей в виде массива таких объектов:

$scope.userTypes = [{text : "Buyer", value : "1"},
    {text : "Vendor", value :  "2"},
    {text : "Buyer / Vendor", value : "9"}];

$scope.user = new User(globalSelectedUserType);

Где Пользователь определяется следующим образом:

function User(userType) {
    this.userType = userType;
    this.isAdminUser = false;
    this.isActive = true;
    this.roleDisabled = true;
};  

И я хочу иметь элемент выбора со списком параметров, исходящим из пользовательских типов, привязывающих значения к свойству «значение» и текст к свойству «текст», и привязывать выбранное значение только к свойству «значение» массива объект, позволяющий пользователю установить значение из кода.

поэтому, когда я создаю пользователя из кода, используя этот

$scope.user = new User("9");

он должен инициализировать выбор с выбранным «Покупатель/Продавец».

Чтение документации элемента select в angular и ng-options кажется, что это невозможно сделать. я пробовал это

<select name="usertypedata" id="UsersTypeData" ng-model="user.userType"
          ng-disabled="user.roleDisabled" ng-options="usertype.value as usertype.text for usertype in userTypes track by usertype.value">
         </select>

и когда мы выбираем опцию, я хочу, чтобы только свойство «значение» заполнялось ng-моделью


person Ghassan Karwchan    schedule 27.10.2014    source источник
comment
Удалите отслеживание, эта проблема обычно возникает, когда вы используете отслеживание с синтаксисом выбрать как (usertype.value as), вам не нужны оба. jsbin.com/suniriteqo/2/edit   -  person PSL    schedule 27.10.2014
comment
Я сделал. Это не сработало, и оно сделало значения в select/options индексом массива   -  person Ghassan Karwchan    schedule 27.10.2014
comment
у меня работает jsbin.com/suniriteqo/4/edit какую версию angular вы используете? Или воспроизведите вашу проблему в демоверсии.   -  person PSL    schedule 27.10.2014
comment
Да, это работает при инициализации, но если вы проверите сгенерированные параметры выбора, вы увидите, что параметры имеют значения как индекс элемента массива, а не свойство value элемента массива. Я имею в виду, что параметры имеют значения: {0, 1, 2}, а не {1,2,9}   -  person Ghassan Karwchan    schedule 27.10.2014
comment
Почему вас волнует значение параметра, angular управляет им, правильно. Все, о чем вам нужно беспокоиться, это правильное значение ngModel. Также взгляните на stackoverflow.com/questions/26372534/   -  person PSL    schedule 27.10.2014
comment
хорошо, я понимаю, что вы имеете в виду. К сожалению, я публикую html-страницу, используя обычную отправку html-формы. И он передает значение выбранного параметра вместо ng-model   -  person Ghassan Karwchan    schedule 27.10.2014
comment
если вы используете сообщение формы, вы можете сохранить скрытый ввод со значением (или идентификатором параметра или любым другим идентификатором) как у ng-model и прочитать это значение на сервере.   -  person PSL    schedule 27.10.2014
comment
yup Это то, что я сделал после того, как прочитал ваш предыдущий комментарий. Я понял, что ng-model — это не то же самое, что option-value, поэтому я сделал то, что вы сейчас предлагаете. Большое спасибо за твою помощь. Я боролся с этим некоторое время   -  person Ghassan Karwchan    schedule 27.10.2014


Ответы (1)


У меня есть два ответа на это. Первый ответ - это то, что PSL предложил в своих комментариях ранее. Второй ответ

вместо привязки ng-options к массиву, я привязал его к объекту, и все заработало нормально

чтобы уточнить, возможно, я не делаю полностью угловое решение от начала до конца. Я использую angular для заполнения/и управления поведением html-страницы/формы.

Но позже я делаю обычную отправку html/form, которая отправляет все данные внутри формы. и обычная форма/отправка, будет использовать значение выбора/опции для отправки этого значения, а не ng-model

но ng-model был важен для меня, чтобы выбрать вариант программно.

person Ghassan Karwchan    schedule 30.10.2014