【问题标题】:angular orderBy multiple fields has syntax errorsangular orderBy 多个字段有语法错误
【发布时间】:2015-02-25 13:42:09
【问题描述】:

我正在尝试使用 angular orderBy 对多个字段进行排序,但出现以下语法错误:

语法错误,无法识别的表达式:div[ng-repeat='r in vm.GetRequests() |过滤器:vm.SearchText | orderBy:['LastName','FirstName']']

似乎出现了额外的符号']',但我在 html 中没有它

html 看起来像:

<div ng-repeat="r in vm.GetRequests() | filter: vm.SearchText |orderBy:'RequestedOn'| orderBy:['LastName','FirstName']">
{{r.LastName}} : {{r.FirstName}}
</div>

函数GetRequests()返回一个对象数组,如下:

[{FirstName:"Test1", LastName:"First"},{FirstName:"Test2",LastName:"Second"},{FirstName:"Test3",LastName:"Third"}]

谁能帮我解决这个问题?

更改 HTM - 删除 orderBy: 'RequestedOn'

<div ng-repeat="r in vm.GetRequests() | filter: vm.SearchText | orderBy:['LastName','FirstName']">
{{r.LastName}} : {{r.FirstName}}
</div>

但我仍然遇到语法错误:

Uncaught Error: Syntax error, unrecognized expression: div[ng-repeat='r in vm.GetRequests() | filter: vm.SearchText | orderBy:['LastName','FirstName']'] 

更新

语法似乎来自浏览器链接,因为当我收到错误消息时,该命令已生效。 并建议将所有订单属性放在一个数组中

非常感谢大家的投入,特别感谢 RishiPrakash :)

【问题讨论】:

  • 尝试
  • 看,在错误中,orderBy : RequestedOn 不存在,错误必须与它有关。
  • @ Rishi Prakash - 我删除了第一个 orderBy:'RequestedOn',但我仍然收到此错误:未捕获的错误:语法错误,无法识别的表达式:div[ng-repeat='r in vm.GetRequests() |过滤器:vm.SearchText | orderBy:['LastName','FirstName']']
  • 最后一个 ] 实际上是 div[ng-repeat in error 的结束信号,至少这个谜题解开了
  • @Rishi Prakash - 我现在看到了,最后一个 ']' 是错误标签的结尾,现在我不明白为什么我仍然会收到语法错误。我已经更新了 HTML

标签: angularjs angularjs-orderby


【解决方案1】:

我认为过滤器只适用于数组,不评估函数。 我会将请求分配给控制器中的范围变量:

js:

$scope.requests = vm.GetRequests();


html:

<div ng-repeat="r in requests | filter: vm.SearchText | orderBy:['RequestedOn','LastName','FirstName']"> {{r.FirstName }}, {{r.LastName}} </div>



注意:我认为您对数组进行排序的方式没有问题,尽管我更喜欢按照 Rishi Prakash 的建议将它们组合成一个 orderBy 表达式。 p>

【讨论】:

  • 如果我只有一个字符串,例如“orderBy: 'RequestedOn'”,我没有任何问题,它可以根据 RequestedOn 属性进行排序,如果我使用“orderBy”,它也可以工作:'RequstedOn' | orderBy:'FirstName'"。但如果使用数组,则它不起作用,例如 order:['RequestedOn','FirstName','LastName']--- 正如我所说的 'RequestedOn' 不是语法错误的原因
  • 我说问题出在 vm.GetRequests() 而不是 RequestedOn。 orderBy 表达式很好。
  • 我使用打字稿,生成的函数 GetRequests() 的 javascript 看起来像:ModelName.prototype.GetRequests = function() {...},我认为这是和你对 $scope.requests = vm.GetRequests() 的意思一样,是吗?
  • 我的意思是 ng-repeat 不会按照你的方式正常工作,如果你真的不需要函数,请使用范围变量。有关更多详细信息,请参阅这篇文章,它将对您有所帮助:stackoverflow.com/questions/12336897/…
【解决方案2】:

试试&lt;div ng-repeat="r in vm.GetRequests() | filter: vm.SearchText() | orderBy:['RequestedOn','LastName','FirstName']"&gt;

filter:vm.SearhText 必须是函数so() 以它结尾。

【讨论】:

  • “RequestedOn”也是对象的属性,是矩对象。首先我想也许瞬间对象无法排序,这就是为什么我不把它放在输出数组中。但这不是原因,我仍然得到同样的错误
  • 告诉我moment对象的价值?
  • @ Rishi Prakash - 我将“RequestedOn”放在单独的 orderBy 中的另一个原因是,如果我将“RequestedOn”也按顺序放置,则数组不正确的属性“LastName”和“FirstName”的顺序数组
  • 这两个对象有以下时刻:1。 d:2014 年 10 月 27 日星期一 16:27:30 GMT+0100(浪漫标准时间)_f: "YYYY-MM-DDTHH:mm:ss"_i: "2014-10-27T16:27:30"_isAMomentObject: true_isUTC: false_locale: Locale_pf: Object__proto_: Moment and 2. d: Mon Oct 27 2014 10:00:00 GMT+0100 (Romance Standard Time)_f: "YYYY-MM-DDTHH:mm:ss "_i: "2014-10-27T10:00:00"_isAMomentObject: true_isUTC: false_locale: Locale_pf: Object__proto_: Moment
  • 好的,我已经创建了 jsfiddle jsfiddle.net/U3pVM/11581 ,你可以在那里创建案例吗?
猜你喜欢
相关资源
最近更新 更多
热门标签