Javascript 通过保持固定的顶部值来重复订购
看到小提琴了吗 我希望列表顶部有一个i项,其余的按字母顺序排列:Javascript 通过保持固定的顶部值来重复订购,javascript,angularjs,angularjs-ng-repeat,angularjs-orderby,Javascript,Angularjs,Angularjs Ng Repeat,Angularjs Orderby,看到小提琴了吗 我希望列表顶部有一个i项,其余的按字母顺序排列: <div ng-controller="MyCtrl"> <ul> <li ng-repeat="value in name | orderBy:'name'">{{value.name}} </li> </ul> </div> 我想要的是名字“kai”排在前面,然后按字母顺序排列其余的名字 =================
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="value in name | orderBy:'name'">{{value.name}} </li>
</ul>
</div>
我想要的是名字“kai”排在前面,然后按字母顺序排列其余的名字
======================编辑===============
现在我已经玩过了,并且得到了以下结果
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.name=[
{name:'zani',country:'Norway'},
{name:'aege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]
}
我认为:
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="value in name | orderBy:myValueFunction ">{{value.name}} </li>
</ul>
</div>
可以将“固定”变量添加到数组项中,并使其如下所示:
$scope.name=[
{name:'zani',country:'Norway', pinned: false},
{name:'aege',country:'Sweden', pinned: false},
{name:'Kai',country:'Denmark', pinned: true}]
然后更改,并相应地重复:
<li ng-repeat="value in name | orderBy:['pinned','name']">{{value.name}} </li>
{{value.name}
现在,由于“pinted”具有第一优先级,“kai”将始终是循环中的第一个。上面的答案很好实现,但由于您没有编辑响应的选项,因此您可以遵循下面提到的简单解决方法。否则,您可以创建自定义过滤器 标记
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="single in name | filter:{'name':'Kai'}">{{single.name}} </li>
<li ng-repeat="value in name | filter:{'name':'!Kai'}" | orderBy:'name'">{{value.name}} </li>
</ul>
</div>
- {{{single.name}}
对于回答这个问题的人,我让它发挥作用:
在这里演奏小提琴:
因此,在我看来,我有以下几点:
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="value in name | orderBy:myValueFunction ">{{value.name}} </li>
</ul>
</div>
这适用于字母排序,因为它是默认的排序顺序我从数据库中获取数据,因此很难做到这一点。是否有其他自定义函数可供使用?您可以创建一个自定义角度过滤器来处理排序。然后你可以使用:{{whatever} ,但我认为这更难。我认为在获取数据的角度代码中,只需编写一个循环,将“pinted”变量添加到每个项中。看起来真的没那么难。因为这是javascript,你甚至不需要在其他对象上包含pinted:false,一个不存在的属性被视为false。看起来不错,但是如果列表很大,它会导致应用程序延迟吗?@krv big?大的数字到底是多少?我编辑了代码,现在我想要的项目显示在顶部,但列表的其余部分没有排序。。
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="value in name | orderBy:myValueFunction ">{{value.name}} </li>
</ul>
</div>
function MyCtrl($scope) {
$scope.name=[
{name:'zani',country:'Norway'},
{name:'aege',country:'Sweden'},
{name:'Kai',country:'Denmark'}];
$scope.myValueFunction = function(value) {
if(value.name == "Kai"){
return -1; //skip this sort and place at top
}else{
return value.name;//return the default sort
}
}
}