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

AngularJS ng-options adds data type to option's value

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

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

<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>

我需要string:Alberta'...

这是我的数据源:

$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: "Alberta"}, {name:"BC"}].. .

请帮忙解决这个问题?

没有更多的代码无法说明太多,你可以做一个 fiddle。这很好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>

如果您正确设计了 Angular 应用程序,则不应关心 <option> 元素的生成方式以及分配的 value 属性。这就是视图。 ViewModel 是在您分配给它的范围变量上设置的。

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

然后,您可以将它提交到您的服务器,或者用它做任何您需要的事情:

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

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

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

这可能有点晚,但是将 "track by" 添加到您的 ng-options 表达式应该可以解决您的问题。即

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