[英]OrderBy in Angular/html
我有以下代码:
<div flex="66">
<h3>{{ hack.title }}</h3>
<h4>{{ hack.description }}</h4>
<h4>{{ hack.status }}</h4>
<p>Backs: {{ hacksCtrl.getBacks(hack.id) }}</p>
</div>
我基本上想按Backs
顺序来表示likes
,所以喜欢的东西越多,它出现在页面上的位置就越高。
所以我做到了,但没有用:
ng-repeat="hack in hacksCtrl.hacks | orderBy: hacksCtrl.getBacks()"
有任何想法吗?
谢谢
下面的控制器:
import Chance from 'chance';
export default function(hack, $state, $sce, HacksService, user) {
const vm = this;
vm.hack = hack;
vm.trustSrc = function(src) {
return $sce.trustAsResourceUrl(src);
};
vm.save = function() {
HacksService.save(vm.hack);
$state.go('hacks.view', {
id: vm.hack.id
});
};
vm.create = function() {
const chance = new Chance();
vm.hack.id = chance.guid();
vm.hack.status = 'proposed';
vm.hack.createdBy = user.name;
vm.hack.userProfileImage = user.picture;
HacksService.create(vm.hack);
$state.go('hacks.view', {
id: vm.hack.id
});
};
vm.like = function(id, $event) {
$event.stopPropagation();
HacksService.like(id, user);
};
vm.hasLiked = function() {
const userId = user.id;
const likes = vm.hack.likes;
if (likes) {
return (likes.indexOf(userId) !== -1);
}
};
vm.getLikes = function() {
return (vm.hack.likes) ? vm.hack.likes.length : 0;
};
vm.isCreate = function() {
return !vm.hack;
};
vm.goToEdit = function(id) {
$state.go('hacks.edit', {
id: id
});
};
}
您的getBacks函数缺少id参数。
编辑:检查getBacks函数,并检查它返回的值是否是您期望的值。 我不确定从您的代码中是否分别获取该数据。
对于您的函数,传入整个hack对象,然后仅在orderBy语句中命名该函数
vm.getBacks = function(hack) {
return (hack.backers) ? hack.backers.length : 0;
};
您的角度重复看起来像这样:
ng-repeat="hack in hacksCtrl.hacks | orderBy: hacksCtrl.getBacks"
它不起作用,因为如Angular文档中所述 ,orderBy期望其参数为以下之一:
function
:吸气功能。 该函数的结果将使用<
,===
,>
运算符进行排序。
string
:一个角度表达式。 此表达式的结果用于比较元素(例如,name用来按名为name的属性进行排序或name.substr(0,3)来按称为name的属性的3个首字符进行排序)。 常量表达式的结果被解释为要在比较中使用的属性名称(例如,“特殊名称”用于按对象的特殊名称属性的值对对象进行排序)。 表达式可以选择以+或-作为前缀,以控制升序或降序排序(例如+ name或-name)。 如果未提供任何属性(例如“ +”),则使用数组元素本身比较在何处排序。
Array
:函数或字符串谓词的数组。 数组中的第一个谓词用于排序,但是当两项相等时,使用下一个谓词。
hackCtrls.getBack(hack.id)
并非以上所述。
因此,要解决您的问题,您可以将回调传递给orderBy,也可以将“ like”属性绑定到hacks上并按属性名称排序:
ng-repeat="hack in hacksCtrl.hacks | orderBy: hacksCtrl.getBacks"
,修改getBacks将是:
vm.getBacks = function(hack) { return hack.backers ? hack.backers.length : 0; }
vm.hacks = [/* multiple hacks */]
是必要的
假设hack具有like
属性ng-repeat="hack in hacksCtrl.hacks | orderBy: 'likes'
hack。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.