我建议你创建这样的工厂
.factory('Cards', function($q) {
// Might use a resource here that returns a JSON array
// Some fake testing data
var cards = [{
"categories": [{
"catid": "1",
"catname": "Test 1",
"catbanner":"//placehold.it/300x100?test-1",
"cards": [{
"id":"11","title": "Cat 1 Cards 1","cover":"img/list-1.jpg"
}, {
"id":"12","title": "Cat 1 Cards 2","cover":"img/list-2.jpg"
}]
}, {
"catid": "1",
"catname": "Test 2",
"catbanner":"//placehold.it/300x100?test-2",
"cards": [{
"id":"11","title": "Cat 1 Cards 1","cover":"11"
}, {
"id":"12","title": "Cat 1 Cards 1","cover":"12"
}]
}, {
"catid": "1",
"catname": "Test 3",
"catbanner":"//placehold.it/300x100?test-3",
"cards": [{
"id":"11","title": "Cat 1 Cards 1","cover":"11"
}, {
"id":"12","title": "Cat 1 Cards 1","cover":"12"
}]
}, {
"catid": "1",
"catname": "Test 4",
"catbanner":"//placehold.it/300x100?test-4",
"cards": [{
"id":"11","title": "Cat 1 Cards 1","cover":"11"
}, {
"id":"12","title": "Cat 1 Cards 1","cover":"12"
}]
}, {
"catid": "1",
"catname": "Test 5",
"catbanner":"//placehold.it/300x100?test-5",
"cards": [{
"id":"11","title": "Cat 1 Cards 1","cover":"11"
}, {
"id":"12","title": "Cat 1 Cards 1","cover":"12"
}]
}, {
"catid": "2",
"catname": "Test 6",
"catbanner":"//placehold.it/300x100?test-6",
"cards": [{
"id":"21","title": "Cat 1 Cards 1","cover":"21"
}]
}]
}];
var deferred = $q.defer();
var _cat = []
var _remove = function(card) { cards.splice(cards.indexOf(card), 1); }
var _getCat = function(catname) {
var array = [];
for (var i = 0; i < cards[0].categories.length; i++) {
if (cards[0].categories[i].catname === catname) {
array.push(cards[0].categories[i]);
}
}
angular.copy(array, _cat);
return deferred.promise;
}
var _getCard = function(catname, cardtitle) {
var array = [];
for (var i = 0; i < cards[0].categories.length; i++) {
if (cards[0].categories[i].catname === catname) {
for (var k = 0; i < cards[0].categories[i].cards.length; k++) {
if (cards[0].categories[i].cards[k].title === cardtitle) {
array.push(cards[0].categories[i].cards[k]);
}}
array.push(cards[0].categories[i]);
}
}
angular.copy(array, _cards);
return deferred.promise;
}
return {
all: function() { return cards; },
remove:_remove,
getCat:_getCat,
getCard:_getCard,
cat: _cat,
cards: _cards
};
});
并调用返回 promise 的方法,如下所示
Cards.getCat($stateParams.catname).then(function () { $scope.cat = Cards.cat}, function () { alert("Error") });