我们说我有这些数据可以输入我的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"}
]
}
]
我如何使用两种类型的过滤器对此ng-repeat应用typeahead,一个在地址上(使用谷歌地图地理编码api),另一个在嵌套项目的值上?并非所有的属性/对象都会出现,因此我猜测它必须是某种条件。我知道要使用的基本表达式是:<typeahead="x.z for x in y | filter:{z:$viewValue}">
非常感谢任何正确方向的推动,谢谢!
答案 0 :(得分: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 = [];
}
});
K很酷。现在我想将显示结果限制为其值,而不是键,并且由于某种原因,typeahead想要验证这些实际上是对象,所以我把这个检查放在我的控制器中:
$scope.display = function(myObject) {
if (myObject && myObject.constructor === Object)
return Object.keys(myObject)[0];
};
所以现在我们在ng-repeat中过滤了typeahead中的'object'属性,这意味着无论该属性存在于何处,它都只会键入该对象的结果,而不会包含任何其他包含相同属性的JSON对象。
现在,我担心过滤不起作用:它会过滤掉特定对象的'对象'属性的所有选项,无论输入什么内容。这就是我现在所处的位置,并且还试图弄清楚如何为另一个属性(地址)绑定另一个过滤器。