我使用 ng-repeat 指令动态地为 angular 中的<select>
元素生成一些选项.js。
我使用ng-repeat
而不是ng-options
因为这适用于空表单,我想设置一个selected
和disabled
默认值,以及模型中没有的最后一个选项。
var form = {}; // to be filled with form data, including form.boro
var boros = {"BK":"brooklyn","Q":"queens","NY":"manhattan","BX":"bronx","SI":"staten island"}
<select class='form-control capitalize' name="city" ng-model='form.boro' >
<option value="" >City</option>
<option ng-repeat="(k, val) in boros" value="{{k}}">{{val}}</option>
<option value='other'>Other</option>
</select>
这生成了预期的元素和选项,但会导致引发以下错误:
TypeError: Cannot read property '$$phase' of null
此错误是由于在<option value="">City</option>
中设置value=""
而导致
该应用程序仍在运行并且不会崩溃,但我很好奇为什么在状态退出时会发生这种情况,以及我是否做错了什么。
看起来将selected
disabled
放在空的初始选项上可以清除错误。
<option value="" selected disabled >City</option>
我的
我认为问题出在选项中的{{city}}上,我猜这没有可用的模型。如果我们将 {{boro}} 打印为值,将 {{city}} 打印为文本,我们需要在城市与 boro 中建立关系。或者你可以把所有城市放在一个对象数组中,并通过将boro键发送到控制器函数来获取城市的值,并得到像{{getCity(boro)}}这样的城市,并将boro设置为ng-model="boro"
我尝试重现您的代码示例,如果我理解得很好,问题实际上是您没有将对象放在数组中,我相信ng-repeat在对象集合中执行。您可以将选项放在具有以下格式的数组中,例如 [{代码:BQ,城市:布鲁克林}]。看下面
app.controller('MainCtrl', function($scope) {
$scope.form = {};
$scope.boros = [
{code: "BK", city: "brooklyn"},
{code: "Q", city: "queens"},
{code: "NY", city: "manhattan"},
{code: "BX", city: "bronx"},
{code: "SI", city:"staten island"}
]
});
和您的模板:
<select class='form-control capitalize' name="city" ng-model='form.boro' >
<option value="" >City</option>
<option ng-repeat="boro in boros track by $index" value="{{boro}}">{{boro.city}}</option>
<option value='other'>Other</option>
</select>
在 plunker 中检查这一点。