Javascript 使用angularjs ng重复,我可以强制列表中的第一个元素吗?

Javascript 使用angularjs ng重复,我可以强制列表中的第一个元素吗?,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我有一个数组,关键字,以ng重复打印: <li ng-repeat="keyword in keywords"> {{ keyword }} </li> 我希望当用户搜索一个特定的关键字时,该关键字被“固定”到列表的顶部,而不管列表是如何排序的。因此,如果用户搜索“Turnip”,则Turnip位于列表的第一位,而其余的按字母顺序排列: Turnip Apples Cucumbers Daikon 我想知道ng repeat是否可以实现此功能,或者我是否需要在顶

我有一个数组,
关键字
,以ng重复打印:

 <li ng-repeat="keyword in keywords"> {{ keyword }} </li>  
我希望当用户搜索一个特定的关键字时,该关键字被“固定”到列表的顶部,而不管列表是如何排序的。因此,如果用户搜索“Turnip”,则Turnip位于列表的第一位,而其余的按字母顺序排列:

Turnip
Apples
Cucumbers
Daikon

我想知道ng repeat是否可以实现此功能,或者我是否需要在顶部插入一个额外的元素,然后从数组中仅过滤该元素来构造此功能。

您可以创建一个自定义角度过滤器来处理排序。那你就可以用

<li ng-repeat="keyword in keywords|my_sort"> {{ keyword }} </li> 
  • {{keyword}}

  • 祝你好运

    我可以想象,数组中可以有一个对象数组,而不仅仅是一个键,例如:

    array {
       [ key: "Turnip",
         pinned: true],
    
       [ key: "Apples",
         pinned: false] }
    
    然后,在你的ng重复中,你可以有一个过滤器,根据需要将固定和未固定分开

    app.filter('pinned', function() {
    
       return function (list, pinned, scope) {
    
          var test = (pinned == 'true' ? true : false);
          var returnArray = [];
    
          for (var i = 0; i < list.length; i++) {
             if (list[i].pinned === test) {
               returnArray.push(list[i]);
             }
          }
    
        return returnArray; 
      };
    });
    
    app.filter('pinted',function(){
    返回函数(列表、固定、范围){
    var测试=(固定='true'?true:false);
    var returnArray=[];
    对于(变量i=0;i
    我创建了这个plunk来展示我上面的意思。一个可能更巧妙的解决方案是按pinted属性对数组进行排序


    我正在添加另一个答案,因为我认为这两个答案都可以使用,但这个带有排序的答案要巧妙得多

    在这里,我只是按照您的需要,先在固定的对象上,然后在名称值上,对OBJ数组进行排序:

    <li ng-repeat="obj in array | orderBy:['pinned','name']:reverseSort ">{{ obj.name }} [<label>Pin</label><input type="checkbox" ng-model="obj.pinned" ng-click="pinObj(obj)" />]</li>
    
  • {{{obj.name}[Pin]

  • 干杯

    这两种方法都是我想到的两种方法的好例子,但这一种更为巧妙,避免了笨拙的标记(在ng repeat中有很多事情我不想重复),因此我将使用它。非常感谢您的努力和示例。
    <li ng-repeat="obj in array | orderBy:['pinned','name']:reverseSort ">{{ obj.name }} [<label>Pin</label><input type="checkbox" ng-model="obj.pinned" ng-click="pinObj(obj)" />]</li>