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
}
}
}
这适用于字母排序,因为它是默认排序顺序
在此处查看 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
}
}
}
这适用于字母排序,因为它是默认排序顺序