2015-12-26 4 views
2

У меня есть три фабрики в Items, ItemTags и Tags. Как создать пользовательский поиск, поиск объектов с другого завода. Например, когда я выбираю тэг 'Стейк', силоин показан в списке, и когда я выбираю тег 'Пицца', Черная Пицца отображается в списке. Спасибо ...(Ionic Framework) Угловая фабрика фильтров JS с другой фабрики?

.factory('Items', function() { 
     var items = [{ 
     id: 1, 
     name:'Black Pizza', 
     main_img:'img/food1.jpg' 
     }, { 
     id: 2, 
     name:'Sirloin', 
     main_img:'img/food2.jpg' 
     }]; 

     return { 
     all: function() { 
      return items; 
     }, 
     remove: function(item) { 
      items.splice(items.indexOf(item), 1); 
     }, 
     get: function(itemId) { 
      for (var i = 0; i < items.length; i++) { 
      if (items[i].id === parseInt(itemId)) { 
       return items[i]; 
      } 
      } 
      return null; 
     } 
     }; 
    }) 

.factory('ItemTags', function(Items,Tags) { 
     // Might use a resource here that returns a JSON array 


     var itemTags = [{ 
     id: 1, 
     itemId:Items.get(1), 
     tagId:Tags.get(0) 
     }, { 
     id: 2, 
     itemId:Items.get(0), 
     tagId:Tags.get(1) 
     }]; 

     return { 
     all: function() { 
      return itemTags; 
     }, 
     remove: function(itemTag) { 
      itemTags.splice(itemTags.indexOf(itemTag), 1); 
     }, 
     get: function(itemTagId) { 
      for (var i = 0; i < itemTags.length; i++) { 
      if (itemTags[i].id === parseInt(itemTagId)) { 
       return itemTags[i]; 
      } 
      } 
      return null; 
     } 
     }; 
    }) 

.factory('Tags', function() { 
     var tags = [{ 
     id: 0, 
     name: 'Steak' 
     }, { 
     id: 1, 
     name: 'Pizza' 
     }, { 
     id: 2, 
     name: 'Delicious' 
     }]; 

     return { 
     all: function() { 
      return tags; 
     }, 
     remove: function(tag) { 
      tags.splice(tags.indexOf(tag), 1); 
     }, 
     get: function(tagId) { 
      for (var i = 0; i < tags.length; i++) { 
      if (tags[i].id === parseInt(tagId)) { 
       return tags[i]; 
      } 
      } 
      return null; 
     } 
     }; 
    }) 

Спасибо за the_mahasagar за помощь: Меня изменить функцию от mahasagar и добавить функцию в ItemTags

getDataByTag: function(tagId , itemId) { 
     for (var i = 0; i < itemTags.length; i++) { 
      if (itemTags[i].tagId.id === parseInt(tagId) && itemTags[i].itemId.id===parseInt(itemId)) { 
      return itemTags[i]; 
      } 
     } 

И это мой фильтр:

$scope.criteriaMatch = function(tagId) { 
     return function(item) { 
      var itemTag = ItemTags.getDataByTag(tagId,item.id); 
      if(itemTag!=null) 
       return true; 

      return null; 
     }; 
    }; 

ответ

0

в соответствии с вашими запросами, u сделал неправильные действия в ItemTags factory.just и добавьте getDataByTag.

.factory('ItemTags', function(Items,Tags) { 
// Might use a resource here that returns a JSON array 
Items.get(0); 
var itemTags = [{ 
    id: 1, 
    itemId:Items.get(2), 
    tagId:Tags.get(0) 
}, { 
    id: 2, 
    itemId:Items.get(1), 
    tagId:Tags.get(1) 
}]; 

return { 
    all: function() { 
    return itemTags; 
    }, 
    remove: function(itemTag) { 
    itemTags.splice(itemTags.indexOf(itemTag), 1); 
    }, 
    get: function(itemTagId) { 
    for (var i = 0; i < itemTags.length; i++) { 
     if (itemTags[i].id === parseInt(itemTagId)) { 
     return itemTags[i]; 
     } 
    } 
    return null; 
    }, 
    getDataByTag: function(itemTagId) { 
    for (var i = 0; i < itemTags.length; i++) { 
     if (itemTags[i].tagId.id === parseInt(itemTagId)) { 
      return itemTags[i]; 
     } 
    } 
    return null; 
    } 
}; 
}) 

и может получить ур данные, такие как:

.controller('AppCtrl', function($scope,Items,Tags,ItemTags) { 
$scope.getData = function(Tagid) { 
    console.log("ItemTags :"+JSON.stringify(ItemTags.getDataByTag(Tagid))); 
} 
    $scope.getData(0); 
}) 

надежды, его же и хотят.

+0

Благодарим за исправление, Это помощь, я изменяю ваш код – user3582100

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