在angular.js 1.0.7 orderBy过滤器中使用谓词字符串'。'颠倒数组顺序。
例如:
$filter('orderBy')(['a','b','c'], '.'); // -> ['c', 'b', 'a'].
如何解释转型的逻辑?
我已经在下面找到更新。的答案。
答案 0 :(得分:3)
我无法使用AngularJS 1.2.16进行复制。使用简单的应用程序,orderBy
不会对输入集进行任何修改:
Normal Order
a
b
c
d
e
Reverse Order
a
b
c
d
e
PLUNKER示例:http://embed.plnkr.co/jn8PHVrgUHqAYjApWMKd
请注意,控制器还包含一个注释语句,该语句将$scope.abc
的顺序更改为不遵循自然顺序。即使有这种变化,也不会影响输出。
有关详细信息,您也可以查看orderBy
的来源:https://github.com/angular/angular.js/blob/master/src/ng/filter/orderBy.js#L78
答案 1 :(得分:0)
玩一点
<ul>
<li ng-repeat="i in abc | orderBy:'.'">{{i}}</li>
</ul>
<ul>
<li ng-repeat="i in abc | orderBy">{{i}}</li>
</ul>
这就是诀窍,它与表达式以及数组具有原始值的事实有关。不知道为什么
答案 2 :(得分:0)
所以我终于找到了一个理智的解释我的问题,这很简单,为什么这种尴尬的行为发生,而不是它的意思或应该如何写,或者有点事。我只是逐步调试开发工具中的源代码调用,结果是:
事实证明,由于角度分析机制的特殊性,'。'最终被认为是NaN,在数组的排序函数中,最后return v1 < v2 ? -1 : 1;
默认为false,我们得到'return 1',它会不断地反转我们的数组顺序。
您可以自己尝试[1,2,3].sort(function(a, b){return 1;})
,输出结果为[3,2,1]
。
宾果
更新:在当前版本的角度中,此行为存在正确抛出的错误:
Error: $parse:syntax : Token '.' not a primary expression at column 1 of the expression [.] starting at [].