如何使用orderBy并使用对象(而不是数组)过滤ng-repeat?

eas*_*syX 4 javascript angularjs angularjs-ng-repeat

我有数据"喜欢"这个:

$scope.persons = {
        "ID123": {
            name_de: "Andre",
            name_en: "Anrew",
            age: 30,
            description: "He is the father of xyz and . . .",

             . . .

        },
        "IDabc": {
            name_de: "Markus",
            name_en: "Mark",
            age: 20,

             . . .
        },
        "IDxyz": {
            name_de: "Isaak",
            name_en: "Isaac",
            age: 23,

             . . .
        }

    . . .

}
Run Code Online (Sandbox Code Playgroud)

我有一个输入/ ng-repeat:

<input ng-model="query" placeholder="Suche . . .">
<ul>
    <li ng-repeat="p in persons | orderBy:'name_de' | filter:query"> Some output here . . . </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

现在问题是如何订购和过滤这个?

与一群人合作,但我需要"ID",所以对象是必要的!?

我正在寻找一种通过N属性过滤对象的方法,例如对于name_de和name_en(如果我搜索安德烈,如果我搜索安德鲁,它将显示ID123)但忽略"描述"的文本(第一个我有过滤器检查所有属性的问题)

syl*_*ter 5

你可以使用toArrayfilter模块更多信息,请看这里:http://ngmodules.org/modules/angular-toArrayFilter

并为您的解决方案提供示例演示http://jsbin.com/nimoxa/1/edit JS:

angular.module('angular-toArrayFilter', [])

.filter('toArray', function () {
  return function (obj, addKey) {
    if (!(obj instanceof Object)) {
      return obj;
    }

    if ( addKey === false ) {
      return Object.values(obj);
    } else {
      return Object.keys(obj).map(function (key) {
        return Object.defineProperty(obj[key], '$key', { enumerable: false, value: key});
      });
    }
  };
});

var app = angular.module('app', ['angular-toArrayFilter']);

app.controller('firstCtrl', function($scope){

  $scope.persons = {

    "IDabc": {
            name_de: "Markus",
            name_en: "Mark",
            age: 20,


        },
        "ID123": {
            name_de: "Andre",
            name_en: "Anrew",
            age: 30,
            description: "He is the father of xyz and . . .",



        },

        "IDxyz": {
            name_de: "Isaak",
            name_en: "Isaac",
            age: 23,


        }   

};

});
Run Code Online (Sandbox Code Playgroud)

HTML:

body ng-app="app">
  <div ng-controller="firstCtrl">
<input ng-model="query" placeholder="Suche . . .">
<ul>
    <li ng-repeat="p in persons | toArray | orderBy:'age' | filter:query"> {{p.name_de}} -> {{p.name_en}} </li>
</ul>
      </div>
</body>
Run Code Online (Sandbox Code Playgroud)