【发布时间】:2017-11-22 05:19:14
【问题描述】:
我正在使用 Angularjs 1.4.2,我必须创建一个由数字和文本组合而成的下拉列表。它是具有两个属性的对象数组。所以我使用数字作为一种标签,并将 0 值和 -1 值转换为文本作为列表的顶部和底部。
我不只是硬编码文本的原因是在过滤器中,我们调用一个服务来更改页面文本的语言,这使得切换语言是动态的,因此我选择了数字标签选项条目的系统。
但是,我一直在列表中看到一个空白选项,并且当下拉菜单出现时,无法预先选择 0 的默认“选择项目”文本。
我发现是这样的
当 ng-model 引用的值时生成空选项 在传递给 ng-options 的一组选项中不存在
在这种情况下,放在范围内的原始列表 已被过滤器修改,所以我认为这就是空选项出现在下拉列表中的原因。
我的代码在没有过滤器的情况下可以正常工作,但是当我尝试应用过滤器时,出现以下错误: 错误:[$rootScope:infdig] 达到了 10 个 $digest() 迭代。中止!
下拉列表确实具有来自过滤器的正确值,但空选项仍然存在并且它被选中而不是文本“选择项目”,这正是我想要的。
HTML:
<!DOCTYPE html>
<html ng-app="app">
<head>
<script data-require="angular.js@1.4.2" data-semver="1.4.2" src="https://code.angularjs.org/1.4.2/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<div ng-controller="Test">
<p>selected item is : {{selectedItem}}</p>
<p> The distance of selected item is : {{selectedItem.distance}} </p>
<select ng-model="selectedItem" ng-options="item.distanceSize for item in items | myFilter" ng-init="selectedItem = items[0]">
</select>
</div>
</body>
</html>
script.js
var app = angular.module('app',[]);
app.controller('Test',function($scope){
$scope.items = [{"distance": "0", "distanceSize": 0},{"distance": "25", "distanceSize": 25},{"distance": "50", "distanceSize": 50},{"distance": "-1", "distanceSize": -1}];
});
app.filter('myFilter', function () {
return function (items) {
var valuesArray = [];
if(items) {
for(var i = 0; i < items.length; i++) {
var myObject = {};
if(items[i].distanceSize === 0) {
myObject.distanceLabel = "0";
myObject.distanceSize = "Select Item";
valuesArray.push(myObject);
}else if(items[i].distanceSize == 25) {
myObject.distanceLabel = "25";
myObject.distanceSize = 25;
valuesArray.push(myObject);
}
else if(items[i].distanceSize == 50) {
myObject.distanceLabel = "50";
myObject.distanceSize = 50;
valuesArray.push(myObject);
}
else if(items[i].distanceSize == -1) {
myObject.distanceLabel = "-1";
myObject.distanceSize = "Select Everything";
valuesArray.push(myObject);
}
}
}
return valuesArray;
};
});
由于我的下拉列表被过滤器修改,我如何删除或屏蔽空选项以及过滤器为什么会抛出错误?
【问题讨论】:
标签: javascript angularjs dropdown