2015-12-30 3 views
1

, поэтому я работаю с базовой моделью модели, чтобы получить голову вокруг фильтрации, и я не могу понять, как извлечь значение свойства из одного объекта в массив, повторяя другой.ng-repeat фильтр по существующим значениям массива

Упрощенная версия массива моей категории, которая находится в области видимости, выглядит следующим образом. Я может выводить их имена с предыдущей директивы, и результаты, как и ожидалось:

[{ 
    "_id": "TY76", 
    "name": "Planes" 
}, { 
    "_id": "887T", 
    "name": "Trains" 
}, { 
    "_id": "A0K4", 
    "name": "Autos" 
}] 

<p ng-repeat="category in product.categories "> {{ category.name }}</p> 

А вот упрощенный продукт, а также в объеме, который может содержать идентификатор одной или нескольких категорий. В этом случае Bobble Head принадлежит обеим плоскостям и Autos:

{ 
    "_id": "9876", 
    "name": "Bobble Head", 
    "cats": "['TY76','A0K4']" 
} 

Теперь, вот где я с трудом. Мне нужно вывести имена категорий вместе с продуктом. Я может выводить идентификаторы нет проблем с помощью:

<p ng-repeat="cat in product.cats ">{{ cat }}</p> 

Но это не имеет смысла для конечного пользователя, но я понятия не имею, как в конечном итоге что-то вроде:

Продукт: Bobble Head | Категории: Planes, Autos

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

Любые идеи?

+0

Можете ли вы предоставить нам рабочую скрипку? –

ответ

2

Похоже, вы хотите построить поиск по категории идентификатор категории Название:

var categories = [{ 
     "_id": "TY76", 
     "name": "Planes" 
    }, { 
     "_id": "887T", 
     "name": "Trains" 
    }, { 
     "_id": "A0K4", 
     "name": "Autos" 
    }]; 

    // build a category lookup id -> name 
    var categoryLookup = {}; 
    categories.forEach(function(category) { 
    categoryLookup[category._id] = category.name; 
    }); 

Вот полный рабочий скрипку: http://jsfiddle.net/02qadem7/1/

+0

Ах, ты избил меня на 3 минуты с ответом, очень похожим на мой, проголосовать! – yvesmancera

0

Вы можете создать объект ключевой пары, где ключ идентификатор и значение название категории:

var categoriesArray = [{ 
    "_id": "TY76", 
    "name": "Planes" 
}, { 
    "_id": "887T", 
    "name": "Trains" 
}, { 
    "_id": "A0K4", 
    "name": "Autos" 
}]; 

$scope.categoriesMap = {}; 
categoriesArray.forEach(function(category) { 
    $scope.categoriesMap[category._id] = category.name; 
}); 

Затем на ваш взгляд, вы можете получить доступ к названию категории, как это:

<div ng-repeat="product in products"> 
    <strong>Product: </strong> {{product.name}} | 
    <strong>Categories: </strong> <span ng-repeat="category in product.cats"> 
     {{categoriesMap[category]}} 
    </span> 
</div> 

Вот plunkr: http://plnkr.co/edit/BpBcCizzU2Vh8VPniiHA?p=preview

0

Я sugest с помощью настраиваемого фильтра по категориям массива.

myApp.filter('byCategoryIds', function() { 
    return function(categories, catIds) { 
     return categories.filter(function(item) { 
      return (catIds.indexOf(item._id) != -1); 
     }); 
    }; 
}); 

Затем вы можете перебирать на массив categori отправки IdS массив так:

<b>Product:</b> 
{{product.name}}; 
<b>Categories:</b> 
<span ng-repeat="cat in categories | byCategoryIds: product.cats">{{ cat.name }}, </span> 
Смежные вопросы