2015-07-20 2 views
2

У меня есть объекты, отформатированные как это:Угловая: как фильтровать по глубине свойства объекта в массиве?

id: 1, 
name: MyObj 
properties: { 
    owners: [ 
    { 
    name:owner1, 
    location: loc1 
    }, 
    { 
    name:owner2, 
    location: loc1 
    } 
] 
} 

Количество владельцев отличается для каждого объекта. Когда я пытаюсь фильтровать его с помощью ng-repeat с filter:searchBox и поиск входов коробки

<input name="search-filter" class="form-control" type="search" ng-model="searchBox.properties.title" /> 
<input name="search-filter" class="form-control" type="search" ng-model="searchBox.properties.owners" /> 

фильтрация по названию работает отлично, однако владельцы фильтрации не работает на всех, но я предположил, что это будет фильтр на основе как расположение и имя. Что я делаю не так?

+0

, что вы хотите найти в объект владельцы? 'name' ** OR ** location –

+0

@PankajParkar У меня есть другой объект, подобный этому, где владельцы не вложены в свойства, и он отлично работает со всеми параметрами владельцев. Однако в этом случае, когда я пытаюсь фильтровать по имени или местоположению, я ничего не получаю. Я просто не могу понять, как это сделать, когда массив владельцев вложен. Кажется, что Angular проходит через несколько вложенных свойств. – fivepointseven

ответ

2

var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 

 
$scope.objs = 
 
    { 
 
    id: 1, 
 
    name: 'MyObj', 
 
    properties: { 
 
     owners: [ 
 
     { 
 
     name: 'owner1', 
 
     location: 'loc1' 
 
     }, 
 
     { 
 
     name: 'owner2', 
 
     location: 'loc2' 
 
     } 
 
    ] 
 
    } 
 
    }; 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myCtrl"> 
 

 
<input name="search-filter" class="form-control" type="search" placeholder="Search by location" ng-model="searchBox.properties.location" /> 
 
<input name="search-filter" class="form-control" type="search" placeholder="Search by name" ng-model="searchBox.properties.owners" /> 
 
    
 
    <div ng-repeat="owner in objs.properties.owners | filter:{'location': searchBox.properties.location} |filter:{'name': searchBox.properties.owners}"> 
 
    {{owner}} 
 
    
 
    </div> 
 

 
</div>

+0

Полностью работает в вашем фрагменте, но не работает вообще в моем коде> _ < – fivepointseven

+0

Возможно, я могу помочь вам, если вы поделитесь своим кодом ... –

+0

Как это сделать что? Он не поместится в комментарии – fivepointseven

0

Вы можете фильтровать вручную

var list = [ 
    { 
    id: 1, 
    name: 'MyObj', 
    properties: { 
     owners: [ 
     { 
     name: 'owner1', 
     location: 'loc1' 
     }, 
     { 
     name: 'owner2', 
     location: 'loc1' 
     } 
    ] 
    } 
    } 
]; 

function filter(filter) { 
    return list.filter(function(item) { 
    return item.properties.owners.find(function(owner) { 
     return Object.keys(filter).every(function(key) { 
     return filter[key] === owner[key]; 
     }); 
    }); 
    }); 
} 

console.log(filter({ name: 'owner1', location: 'loc1' })); 

Я использовал ES6 подкладку для этого.

Смежные вопросы