Вот мой JSon объект:AngularJS ngOptions трэк не установлен весь объект ngModel
$scope.todos = [{
name: 'angular',
field: ['a', 'b', 'c', 'd'],
id: 1
}, {
name: 'asd',
field: ['a', 'b', 'c', 'd', 'e'],
id: 2
}];
я даю выбрать как:
<select ng-model="dashboard.type" ng-options="item as item.name for item in todos track by item.name"></select>
Теперь, когда выбран вариант я хочу другой выбрать, какие итерацию после ngModel
предыдущего выбора. Следующий выглядит как:
<select ng-model="dashboard.label" ng-options="item as item for item in dashboard.type.field"></select>
Он отлично работает, когда я выбираю опцию вручную, но если их это значение в dashboard.type (например: $scope.dashboard.type.name = 'qwe'
) в моем сценарии, он использует track by
выбрать вариант и сохранить его в dashboard.type
вместо сохранения всего объекта он просто сохраняет значение, используемое в опции track by
.
Соотношение dashboard.type:
- когда я выбираю опцию вручную:
{"name":"qwe","field":["a","b","c","d","f"],"id":3}
- Когда трэк используется:
{"name":"qwe"}
ПРИМЕЧАНИЕ: я не могу использовать track by item
. Он должен быть свойством объекта item
. Он может быть либо name
, либо id
.
Адрес plnkr.
Edit:
Как отмечалось многими, я хотел бы уточнить, что я не могу инициализировать объект любого значения todos
списка. Это связано с тем, что значение dashboard.type.name
будет отличаться каждый раз, а список todos
варьируется от 10 до 100 единиц. Теперь мне нужно перечислить список todos
, если todos[index].name==someName
и назначить соответствующий объект. Я активно пытаюсь избежать этого суждения (потому что должен быть лучший способ).
Примечание: Я также попытался с помощью ng-change
и назначить реальный объект для dashboard.type.name
но это работает только тогда, когда выбрана опция вручную, что уже, кажется, работает хорошо. Он не назначает объект, если используется track by
.
ВАЖНО:$scope.dashboard.type.name = 'qwe'
- всего лишь пример. Значение $scope.dashboard.type.name
может меняться каждый раз, когда страница загружается.
PS: Также я должен был упомянуть об этом раньше. Простите, я плохой!
просто изменить инициализацию как это $ scope.dashboard = {}; \t $ scope.dashboard.type = {} \t $ scope.dashboard.type = { имя: 'QWE', поле: [ 'а', 'б', 'с', 'd', «е '], ID: 3 }; –
если бы я мог сделать последнюю часть без итерации через список 'todos', чем да, это сработает. PS: Я обновил вопрос, пожалуйста, проверьте еще раз. –
в этом случае вызовите функцию на ng-init и инициализируйте там на основе значения, которое вы хотите –