2015-03-02 4 views
1

У меня есть странная проблема, которую я не могу воспроизвести на Plunker. Когда в модели задан первый параметр «пользователь», выбор отображает его правильно, и он устанавливается на «пользователь». Когда я загружаю другого пользователя с ролью: «admin», опция выбора устанавливается в пустую.ng-options не выбирает последний элемент в массиве опций

В мой контроллер я определяю:

$scope.roles = ['user', 'admin']; 

Мой объект $ scope.user выглядит следующим образом:

{ 
    "_id": "54f1f8f7e01249f0061c5088", 
    "displayName": "Test1 User", 
    "provider": "local", 
    "username": "test1", 
    "__v": 0, 
    "updated": "2015-03-02T07:41:42.388Z", 
    "created": "2015-02-28T17:20:55.893Z", 
    "role": "admin", 
    "profileImageURL": "modules/users/img/profile/default.png", 
    "email": "[email protected]", 
    "lastName": "User", 
    "firstName": "Test1" 
} 

На мой взгляд:

<select id="role" class="form-control" data-ng-model="user.role" data-ng-options="role for role in roles"></select> 

Когда я реверс роли array $scope.roles = ['admin', 'user'];, тогда администраторы отображаются правильно, а «пользователь» не будет выбран как выбранный.

Странно, если я добавлю третий элемент в массив $scope.roles = ['user', 'admin', 'joe']; Тогда первые два «пользователя» и «админ» будут выбраны правильно, а последний «joe» не будет.

Любые идеи?

--- UPDATE ---

Сформированный выберите разметки выглядит следующим образом:

<select id="role" class="form-control ng-pristine ng-valid" data-ng-options="role for role in roles" data-ng-model="user.role"> 
    <option value="? string:joe ?"></option> 
    <option value="0" selected="selected" label="admin">admin</option> 
    <option value="1" label="user">user</option> 
    <option value="2" label="joe">joe</option> 
</select> 
+0

Ну, как вы сказали, это [не воспроизводимо] (http://jsfiddle.net/iluzyanin/w1w28fg7/) с данной информацией. Попробуйте посмотреть фактическую разметку позади 'select' - что вы видите там для последней опции? –

+0

См. Разметку в вопросе обновления – orszaczky

+0

Выглядит [знакомый] (http://stackoverflow.com/questions/16783294/angular-adds-strange-options-into-select-element-when-setting-model-value)? –

ответ

0

Я сделал все комбинации с вами, но ошибка не возникает.

Пожалуйста, посмотрите на мои тесты:

http://plnkr.co/edit/jzfhD3D60fhj8yFqBqgJ?p=preview

<h3>select</h3> 
<select ng-model="role" ng-options="item for item in roles"></select> 
<h3>original</h3> 
<select id="role" class="form-control" data-ng-model="user.role" data-ng-options="role for role in roles"></select> 

Try, чтобы подтвердить свой angularjs версию. Возможно, может быть ошибка конкретной версии.

+0

Фактически вы можете воспроизвести ошибку в верхнем элементе. Если вы проверите источник html, вы увидите первый пустой параметр: ' 'Мой пользовательский объект загружается из вызова API и, по-видимому, это происходит, когда модель недоступна во время привязки. Странно это не происходит, когда параметры находятся в объектах. – orszaczky

+0

Я расширил ваш plunker, включая мое обходное решение, основанное на объектах, и попытался подражать вызову api с помощью setTimeout(). Интересное происходит, когда вы открываете «старый» выбор, ничего не происходит, но как только вы открываете «объект», он обновляет привязку. Это не то же самое поведение, которое у меня было, но оно показывает, что есть некоторая разница в массивах и объектах с угловым управлением. См. Здесь: http://plnkr.co/edit/WcAfmgwJkmJVfLFAPi2Z?p=preview – orszaczky

+0

о первом вхождении: почему ваша модель изначально имеет нулевое значение, angularjs отражают это, создавая дополнительный