Ng select не работает с родительским div ng-repeat

Если я использую точный текст для сравнения в ng-init или ng-selected, то он отлично работает, например. ng-init="status='OPEN'", но это не работает, когда я использую переменную цикла data.status. Любое предложение?

<div ng-repeat="user in filtered = userList | filter:search">
   <select ng-selected="{{user.status == item.id}}" ng-options="item.name for item in item track by item.id" ng-model="status" name="status">
   </select>
</div>

$scope.item = [
    {id: 'OPEN', name: 'OPEN'},
    {id: 'RESCHEDULE', name: 'RESCHEDULE'},
    {id: 'CANCEL', name: 'CANCEL'},
    {id: 'CLOSED', name: 'CLOSED'}
];

Ваша разметка неправильная. Вы повторяете элементы <div>, а не параметры внутри элемента <select>.

Observer 10.08.2018 14:49

это часть кода, который я добавил сюда. Мне нужно повторить div и показать выбранное значение <select>

dipika khona 10.08.2018 14:57

@Observer <? Php foreach ($ var as $ key => $ value) {?> <select> <option <? Php if ($ value ['status'] == 'OPEN') {echo 'selected = "selected "'; }?> value = "OPEN"> OPEN </option> </select> <? php}?> Это ожидаемый результат, но в angular js. есть ли возможность добиться этого в angular js?

dipika khona 10.08.2018 14:59
0
3
84
1

Ответы 1

Немного неясно, что именно вы пытаетесь сделать, и я думаю, что вы, возможно, пытаетесь сделать многое за один присест, когда вам следует больше его сломать. Одна вещь, которая действительно выделяется, - это то, что вы неправильно используете ng-selected.

Во-первых, не нужно оборачивать условное выражение в руле {{ }}. (Это подразумевает двустороннюю привязку к объекту JavaScript и не имеет смысла в данном контексте).

Во-вторых, директиву ng-selected нельзя применить к элементу select, только к элементу option.

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

2-сторонняя привязка

Помните, что данные, к которым вы привязываетесь с помощью ng-модели, связаны с 2-сторонняя привязка, что означает, что выбор будет соответствовать базовым данным. В этом случае ничего особенного в шаблоне делать не нужно.

<div ng-repeat="user in userList">
    <select ng-options="item.name for item in itemList track by item.id" ng-model="user.selectedItem">
    </select>
</div>

Вместо этого вы просто обрабатываете это в своем контроллере:

//This shows a static example. Change to whatever is appropriate, probably in a for loop etc
$scope.userList[1].selectedItem = $scope.itemList[1] 

ng-repeat внутри выбора

В качестве альтернативы вы можете использовать подход с использованием ng-repeat внутри вашего элемента select. Затем это позволяет вам более точно определять поведение для каждого варианта отдельно.

<div ng-repeat="user in userList">
    <select ng-model="user.selectedItem">
        <option ng-repeat="item in itemList" ng-selected="user.status === item.id">
    </select>
</div>

(N.b. Я отредактировал некоторые из ваших имен переменных для ясности, например, изменил 'item' на 'itemList')

Другие вопросы по теме