2016-07-10 2 views
0

Я довольно новыми для Угловое, так что я что-то тривиальное хватает:Почему Angular все еще добавляет неизвестный выбор?

<select ng-model="shop_index"> 
    <option ng-repeat="elem in shops" 
      ng-selected="{{$first}}" 
      ng-value="{{$index}}">{{elem.name}}</option> 
</select> 

Когда я смотрю на созданный HTML-код он выглядит отлично для этого неизвестного записи, за исключением. Я добавляю ng-init="0" в код HTML - без изменений. Я инициализирую значение модели в контроллере (перед извлечением данных) - без изменений. Я запускаю модель после извлечения данных - без изменений. Этот неизвестный вариант просто сваривается :-).

Я не прошу, как избавиться от него (например, добавить его вручную, но скрыто), но как исправить вышеуказанный код, чтобы удалить его автоматически.

+0

Try инициировать 'shop_index'. –

+1

Это потому, что вы не используете 'ngOptions', ничего общего с' shop_index'. –

+0

@ IsmailRBOUH, как я уже писал, я уже пробовал, в трех местах сразу, я не вижу другого места, где я могу поставить init для него. – greenoldman

ответ

1

Вы должны использовать это:

В вашем контроллер:

$scope.shop_index = $scope.shops[0]; 

В вашем зрения:

<select ng-model="shop_index" ng-options="elem as elem.name for elem in shops"></select> 
+0

Большое спасибо !!! :-) – greenoldman

+0

Рад помочь :) – developer033

1

Вам нужно использовать ngOptions с выбором, иначе значения будут неправильно связаны с select, пока вы не выберете значение. Причина этого ускользает от меня на данный момент, но основная идея заключается в том, что значения, которые вы передаете, будут соответствовать индексу массива, а не значениям, к которым вы можете привыкнуть.

Значение входного элемента в результате не должно иметь для вас никакого значения.

Директива ngOptions должна быть в форме value as label for object in collection.

Если значения в HTML равны undefined, это связано с тем, что указанное выше выражение неверно - убедитесь, что value указывает на допустимое значение.

+0

После использования кода @ developer033 я также проверил отслеживание с помощью «elem.id» - поэтому он появляется в случае массивов, вы не можете использовать отслеживание по массиву индексов, это должно быть то, что сидит ** внутри ** данных (или данных сам - как весь элемент). – greenoldman

+0

вы можете определенно отслеживать по индексу в массиве, но это очень вероятно * не *, что вы хотите, потому что параметр value в 'ngOptions' - это то, что установлено в' ngModel'. Вероятно, вы не хотите, чтобы ваше значение модели являлось индексом массива. –

Смежные вопросы