0

假设我有这些数据输入我的 ng-repeat:

[
  {
    "name": "Big Bird",
    "address": "abc street, san francisco california 00000",
    "object": [
      {"a": "b"},
      {"c": "d"},
      {"e": "f"}
    ]
  },
  {
    "address": "abc street, san francisco california 00000",
    "object": [
      {"a1": "b1"},
      {"c1": "d1"},
      {"e1": "f1"}
    ]
  }
]

如何使用两种类型的过滤器将 typeahead 应用于此 ng-repeat,一种在地址上(使用谷歌地图地理编码 api),另一种在嵌套项目的值上?并非所有属性/对象都会出现,所以我猜它必须是某种有条件的。我知道要使用的基本表达式是:<typeahead="x.z for x in y | filter:{z:$viewValue}">

任何朝着正确方向的推动将不胜感激,谢谢!

4

1 回答 1

0

编辑:我让它部分工作,以便它过滤掉一个属性。要从特定属性中提取,我在 HTML(示例)中使用了它:

<div ng-repeat="stuff in stuffs">
  <input ng-model="someModel" typeahead="obj as obj[display(obj)] for obj in stuff.object">
</div>

Angular 会区分每个 JSON 对象中是否不存在“object”属性,因此我将其包含在控制器的 $http.get 中,这样当没有名为“object”的属性时,会为其创建一个空数组:

angular.forEach(stuffs, function(value, key) {
  if (!value.object) {
    value.object = [];
  }
});

酷酷的。现在我想将显示结果限制为它的值,而不是键,并且由于某种原因 typeahead 想要验证这些实际上是对象,所以我把这个检查放在我的控制器中:

$scope.display = function(myObject) {
  if (myObject && myObject.constructor === Object) 
    return Object.keys(myObject)[0];
}; 

所以现在我们在 ng-repeat 中过滤我们的 typeahead 中的 'object' 属性,这意味着无论该属性存在于何处,它将只预先输入该对象的结果,而不是包含相同属性的任何其他 JSON 对象。

现在,我担心过滤不起作用:它过滤该特定对象的“对象”属性的所有选项,无论输入什么。所以这就是我现在所在的位置,并试图弄清楚如何与另一个过滤另一个属性(地址)。

于 2014-09-11T16:06:59.783 回答