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>