<div ng-repeat="definition in definitions">
...
<select ng-options="source.Id as (source.Author + " " + source.Desc) for source in sources" ng-model="definition.SourceId"></select>
//TODO:
<p>{{ SELECTED TEXT HERE }}</p>
<p>{{ selectedSource.Author + " " + selectedSource.Desc + " " + selectedSource.Year}}</p>
</div>
Який найпростіший спосіб відобразити вибраний текст із списку вибору, де ng-модель - ідентифікатор? Або ще краще, як я можу отримати вибраний вихідний об’єкт?
Я знайду рішення - використовувати об'єкт як ng-модель для вибору, але я не можу цього зробити в цьому випадку, мені потрібно зберегти SourceId у своїй моделі визначення.
Відповіді:
0 для відповіді № 1Ви можете вибрати весь об'єкт, а потім показати властивість, яку ви хочете.
У наступному коді я змінююсь source.Id as...
до source as...
:
<select ng-options="source as (source.Author + " " + source.Desc) for source in sources"
ng-model="definition">
</select>
Тепер ви можете відобразити потрібну власність:
<p>{{definition.Author}} {{definition.Desc}} {{definition.Year}}</p>
Зауважте, я також змінився definition.SourceId
до definition
.
-1 для відповіді № 2
Нарешті я знайшов спосіб змусити його працювати. Моя модель зараз - це визначення._ джерело, і я оновлюю своє визначення. Вихід із змін.
<div ng-repeat="definition in definitions" ng-controller="definitionController">
...
<select ng-change="definition.SourceId = definition._source.Id"
ng-model="definition._source"
ng-options="source as (source.Author + " " + source.Desc) for source in sources"></select>
</div>
Щоб мати своє початкове значення, я додав контролер до свого ng-повтору, де я фільтрую джерела, щоб отримати вибране джерело.
function definitionController($scope) {
var source = $filter("filter")($scope.sources, { Id: $scope.definition.SourceId }, true);
if (source.length == 1) {
$scope.definition._source = source[0];
}
}