Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过保持固定的顶部值来重复订购_Javascript_Angularjs_Angularjs Ng Repeat_Angularjs Orderby - Fatal编程技术网

Javascript 通过保持固定的顶部值来重复订购

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”排在前面,然后按字母顺序排列其余的名字 =================

看到小提琴了吗

我希望列表顶部有一个i项,其余的按字母顺序排列:

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