読者です 読者をやめる 読者になる 読者になる

知行合一

とか言ってみる

【AngularJS】フィルタをかけようとorderByしたけど効かなかった

AngularJS Javascript
Resource {0: Object, 1: Object}
    0: Object
        content: "こっちが古いよ"
        id: 1
        target_date: "2016-02-09 00:00:00"
        title: "ひとつめ"
    1: Object
        content: "こっちが新しいよ"
        id: 2
        target_date: "2016-02-11 00:00:00"
        title: "ふたつめ"

みたいなコールバックが来た時に、target_dateが最新のものから表示させようと

<li ng-repeat="result in results  | orderBy: '-target_date'">

としていたが全然ソートされなかった。
原因は下記にもあるように、配列じゃないからソートされなかった。

参考
AngularJSのng-repeatのorderByはArrayじゃないとソートされない
javascript - How to orderby in AngularJS using Nested property - Stack Overflow
AngularJS


色々方法はあるだろうけど、

$scope.results = _.sortBy(results[0]);

というように$scopeのプロパティに入れる時にソートをかけることで上手くいった。
バッドノウハウっぽいけど今回はこれでよし!

var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 42 },
  { 'user': 'barney', 'age': 34 }
];

_.sortBy(users, function(o) { return o.user; });
// → objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]

_.sortBy(users, ['user', 'age']);
// → objects for [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]