(Ionic Framework) Angular 来自另一个工厂的 JS 过滤器工厂?
(Ionic Framework) Angular JS filter factory from another factory?
我在 Items、ItemTags 和 Tags 中有三个工厂。如何创建自定义搜索以搜索来自其他工厂的项目。例如,当我 select 标签 'Steak' 时,沙朗显示在列表中,而当我 select 标签 'Pizza' 时,黑比萨显示在列表中。谢谢...
.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;
};
};
根据您的问题,您在 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);
})
希望,和你想要的一样
我在 Items、ItemTags 和 Tags 中有三个工厂。如何创建自定义搜索以搜索来自其他工厂的项目。例如,当我 select 标签 'Steak' 时,沙朗显示在列表中,而当我 select 标签 'Pizza' 时,黑比萨显示在列表中。谢谢...
.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;
};
};
根据您的问题,您在 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);
})
希望,和你想要的一样