Вот мой объект json:
$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.
Изменить:
Как отмечали многие, я хотел бы уточнить, что я не могу инициализировать объект любым значением списка 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: Также я должен был упомянуть об этом раньше. Извините, мой плохой!
todos
, тогда да, это сработало бы. PS: я обновил вопрос, пожалуйста, проверьте еще раз. - person Vasu Sheoran   schedule 17.06.2016