2013-10-30 35 views
5

我目前坚持了这看似简单的问题:AngularJS:获得选择的标签,而无需修改NG-模型

控制器:

$scope.fruits = [{ 
    name: 'AP', 
    label: 'Apple' 
    }, { 
    name: 'BA', 
    label: 'Bananas' 
    }]; 

HTML代码:

<select 
    ng-model="meal.fruit" 
    ng-options="fruit.name as fruit.label for fruit in fruits"> 
</select> 

<p>Fruit : {{meal.fruit}}</p> 

问题是,这显示

Fruit : BA 

而不是

Fruit : Bananas 

我不能修改NG-选项“果为fruit.label”因为我需要我的模型“meal.fruit”是“AP”或“BA”(因为它是一个Java枚举反序列化由杰克逊,它需要枚举值)。

JSFiddle

总之,我需要meal.fruit是“BA”,我也希望能够以显示所选值“香蕉”别的地方。

我该怎么办?

编辑:

为我工作的解决方案是由Maxim Shoustin,发现(非常感谢!):

我修改了代码,具备以下条件:

http://jsfiddle.net/2qfSB/77/

而且然后我修改我的提交方法添加以下内容:

$scope.meal.fruit = $scope.meal.fruit.name; 

回答

3

只要改变ng-options

ng-options="fruit.label as fruit.label for fruit in fruits"> 

固定演示:Fiddle

作为一个侧面说明

您可以通过默认的第一个元素设置使用ng-init避免空连击:

<select 
     ng-model="meal.fruit" 
     ng-options="fruit.label as fruit.label for fruit in fruits" 
     ng-init="meal.fruit = fruits[0].label" 
    > 

演示:Fiddle

+0

那不解决我的问题,因为现在meal.fruit包含“香蕉”时,我提交表单。我需要它包含由杰克逊反序列化的“BA”:(你的例子中的 – Baptiste

+0

'

水果:{{meal.fruit}}

'你想要的:'水果:香蕉'所以我失去了你,你能给我更多的信息? –

+0

我知道,这部分现在是好的,但我需要meal.fruit成为由杰克逊反序列化的“BA” – Baptiste