AngularJS:选择由id绑定的列表,如何获取所选文本?

时间:2017-01-18 15:56:04

标签: 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-model是id的选择列表中显示所选文本的最简单方法是什么?或者更好的是,我如何获得所选的源对象?

我找到的解决方案是在select上使用对象作为ng-model,但在这种情况下我不能这样做,我需要在我的定义模型中保存SourceId。

2 个答案:

答案 0 :(得分:0)

您可以选择整个对象,然后显示所需的属性。

在以下代码中,我将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 :(得分:-1)

我终于找到了让它发挥作用的方法。我的模型现在是definition._source,我更新了我的定义.SourceId on change。

<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-repeat中添加了一个控制器,我在其中过滤源以获取所选源。

function definitionController($scope) {
    var source = $filter("filter")($scope.sources, { Id: $scope.definition.SourceId }, true);
    if (source.length == 1) {
        $scope.definition._source = source[0];
    }
}