创建在ng-repeat中运行函数的orderBy表达式

时间:2016-03-08 20:10:52

标签: angularjs function expression sql-order-by ng-repeat

我有一群人firstNamelastName s。我希望ng-repeat通过它们然后orderBy: 'lastName'。这很好。

但是,person数组中的某些people只有一个名字。我希望能够按姓氏排序,每当找到只有 名字的人时,将该名字视为姓氏,即。第一个名字的首字母用其余的姓氏按字母顺序排列(希望有意义......)

是在我的控制器中编写函数然后在orderBy:表达式中调用该变量的情况吗?我试过了,但它不起作用:

控制器:

self.nameOrder = function(thisOne) {
    if (thisOne.lastName == null) {
        thisOne.firstName == thisOne.lastName;
    }
}

查看:

<p ng-repeat="name in people | orderBy: 'lastName.nameOrder()' ">{{lastName}}</p>

我知道上面的内容可能完全错了,但我认为最好至少展示一直在尝试的东西,这样我的意图就更清楚了:/

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:2)

该函数应该是一个getter,即返回orderBy将用于比较所有用户的值。

您的功能不会返回任何内容。此外,您没有将函数作为参数传递给orderBy。代码应该是:

self.nameOrder = function(thisOne) {
    // return lastName, or firstName if lastName is null
    return thisOne.lastName || thisOne.firstName;
}

并且html应该使用

ng-repeat="name in people | orderBy:vm.nameOrder"

(假设vm是用于控制器的别名)

答案 1 :(得分:-1)

问题可能出在:

thisOne.firstName == thisOne.lastName;

那一行应该是:

thisOne.firstName = thisOne.lastName;