ng-repeat order通过保持固定的最高值

ng-repeat orderBy keeping fixed top value

在此处查看 fiddle http://jsfiddle.net/prantikv/gcz4gwgw/1/

我想在列表顶部获得第 i 项,其余按字母顺序排列:

<div ng-controller="MyCtrl">
 <ul>
  <li ng-repeat="value in name | orderBy:'name'">{{value.name}} </li>   
   </ul>    

  </div>

在我的控制器中我有以下内容

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.name=[
{name:'zani',country:'Norway'},
{name:'aege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]


}

我想要的是名字 "kai" 先出现,然后按字母顺序排列。

================编辑===============

现在我已经玩过了,得到了以下

在我看来:

<div ng-controller="MyCtrl">
 <ul>
  <li ng-repeat="value in name | orderBy:myValueFunction ">{{value.name}} </li>   
   </ul>    

  </div>

在我的控制器中:

 $scope.myValueFunction = function(value) {
    if(value.name == "kai"){

        return value.name;
    }else{
        //what todo here so the rest of the list is sorted alphabetically
    }
}        

您可以将 "pinned" 变量添加到您的数组项中,并使其像这样:

$scope.name=[
{name:'zani',country:'Norway', pinned: false},
{name:'aege',country:'Sweden', pinned: false},
{name:'Kai',country:'Denmark', pinned: true}]

然后相应地改变你的 ng-repeat:

<li ng-repeat="value in name | orderBy:['pinned','name']">{{value.name}} </li>

现在 "pinned" 具有第一优先级,'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>

对于那些提出这个问题的人,我让它起作用了: 在这里工作 fiddle: http://jsfiddle.net/prantikv/gcz4gwgw/7/

所以在我看来我有以下几点:

<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
    }
   }  
 }

这适用于字母排序,因为它是默认排序顺序