/ / AngularJS: Виберіть список, пов'язаний з id, як отримати вибраний текст? - angularjs

AngularJS: Виберіть список, пов'язаний з id, як отримати вибраний текст? - angularjs

<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];
}
}