AngularJS ng-options将数据类型添加到选项的值

时间:2015-07-22 22:27:42

标签: javascript angularjs ng-options

尝试使用AngularJS和ng-options的最新版本(1.5.8)来填充下拉列表。

问题是它正在添加数据类型和值,如下所示:

<select class="possedetail ng-valid ng-dirty ng-valid-parse ng-touched" ng-model="Province" ng-options="p as p for p in provList">
<option value="string:ALBERTA" label="ALBERTA">ALBERTA</option>
<option value="string:BRITISH COLUMBIA" label="BRITISH COLUMBIA">BRITISH COLUMBIA</option></select>

我需要字符串:艾伯塔省&#39; ...

这是我的数据来源:

$scope.provList = ["ALBERTA","BRITISH COLUMBIA","MANITOBA","NEW BRUNSWICK","NEWFOUNDLAND AND LABRADOR","NORTHWEST TERRITORIES","NOVA SCOTIA","NUNAVUT","ONTARIO","PRINCE EDWARD ISLAND","QUEBEC","SASKATCHEWAN","YUKON",];

我已阅读Google文档,在网上搜索并尝试将我的数据源格式更改为[{name:&#34; Alberta&#34;},{name:&#34; BC&#34;}] ..

请帮忙,不管怎么说?

3 个答案:

答案 0 :(得分:19)

这可能有点晚了,但在你的ng-options表达式中添加“track by”可以解决你的问题。即。

<select ng-model="Province" ng-options="p for p in provList track by p"></select>

答案 1 :(得分:1)

如果您正在设计Angular应用程序,则不应该关心如何生成<option>元素以及分配了value属性。这是视图。 ViewModel是您为其分配的范围变量上设置的内容。

换句话说,您的示例有效。 $scope.Province将等于所选的省字符串,例如"ALBERTA"。 Angular为你做翻译。

然后,您可以将其提交到您的服务器,或随身携带它做任何事情:

$http.post("/some/api", {data: $scope.Province})

但是,如果必须,您可以使用<option>生成ng-repeat s。效率会更低,更冗长,但它会起作用:

<select ng-model="Province">
  <option ng-repeat="p in provList" value="{{p}}">{{p}}</option>
</select>

答案 2 :(得分:-3)

用更多的代码说不出来,你可以做一个小提琴。这很好http://jsfiddle.net/zm0eq6xf/

<div ng-app="myapp">
    <fieldset ng-controller="FirstCtrl">
        <select 
        ng-options="p for p in provList"
        ng-model="p"></select>
    {{ p }}
</fieldset>