我从1.2.14迁移到1.4.8时遇到了这种情况.这在1.2.14中工作正常,但我在1.4.8中获得了无限的$ digest()循环.这是一个小提琴,展示了这个问题.小提琴比这篇文章更容易看,但是SO让我包括代码
我有一个select看起来像这样的元素:
<select ng-model="selectedId" ng-options="opt.id as opt.label for opt in getOptions()">
Run Code Online (Sandbox Code Playgroud)
我的选项是对象,如下所示:
$scope.options = [ { id: 1, label: 'one' }, { id: 2, label: 'two' } ];
Run Code Online (Sandbox Code Playgroud)
我想给出ngOptions指令的选项数组取决于条件; 有时我只是想给它$scope.options,但有时我想包括另一个选项.
$scope.getOptions = function() {
if ($scope.showThirdOption)
return [{ id: 3, label: 'three' }].concat($scope.options);
else
return $scope.options;
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我以编程方式将我的模型设置为3:
...
$scope.selectedId = 3;
...
Run Code Online (Sandbox Code Playgroud)
......即使该选项不存在,Angular也不会感到沮丧.它只是<option>向<select>元素添加一个节点:<option value="?" selected="selected"></option>下拉列表中的选定值显示为空白.
但是,如果我然后设置我的状态st我的getOptions()返回另外的选项:
...
$scope.selectedId = 3;
$scope.showThirdOption = …Run Code Online (Sandbox Code Playgroud)