我尝试使用'name'按顺序排列列表中的第一项后初始化下拉选项,如下所示:
<h2 class="presentation site is-input-header">Site</h2>
<div class="modal-select-element">
<select ng-model="selected_site"
ng-init="selected_site = availableSites()[0]"
ng-options="site.name for site in availableSites() | orderBy:'name'">
</select>
</div>
但是,初始值只是一个随机选择的站点,而不是列表中的第一个名称。有没有办法在排序列表中显示第一项?
答案 0 :(得分:2)
由于您已经使用函数availableSites()
来填充ng-options数据,我建议您在函数中而不是使用ng-options对数据进行排序。它会更高效,并且应该避免你遇到的问题。
$scope.availableSites() {
var array = $scope.whateverMeansYouTookToGetYourDataFn();
return array.sort(function(a,b){/* do your sorting or use lodash thats nice too */});
}
你看到这种副作用的原因是因为availableSites()[0]
正在抓取你的未排序数组的第一项,同时,orderBy
将它们分类到任何视图顺序,而不是保证{{1}是排序后的第一个项目。
示例:
availableSites()[0]
var unsortedArrayFromController = [
{
"name": "z"
},
{
"name": "b"
},
{
"name": "d"
}
]
{name:z}
如果ng-options对此对象数组进行排序,则仍将选择名称为“z”的选项,但现在将以不同方式排序(比如说最后一次),因此不再需要成为下拉列表中的第一项。
旁注。我建议将unsortedArrayFromController[0]
存储在与存储selected_site = availableSites()[0]
功能相同的控制器中。 availableSites()
指令仅用于需要为嵌套的ng-init
ng-repeat
本地人设置别名的特定情况。