如何从 AngularJS 中的服务访问 $stateParams?
How can I access $stateParams from a service in AngularJS?
这是我的服务:
MetronicApp.factory('ItemService', ['$http', '$sessionStorage', '$stateParams', function($http, $sessionStorage, $stateParams) {
return {
save: function(data, success, error) {
return $http.post(baseUrl + '/shops/' + $sessionStorage.currentShop.id + '/menus/' + $stateParams.menuId + '/categories/' + $stateParams.categoryId + '/items', data).success(success).error(error);
},
update: function(data, success, error) {
return $http.put(baseUrl + '/items/' + data.id, data).success(success).error(error);
},
saveTranslation: function(data, success, error) {
return $http.post(baseUrl + '/itemTranslation', data).success(success).error(error);
},
get: function(itemId, success, error) {
return $http.get(baseUrl + '/items/' + itemId).success(success).error(error);
},
getAll: function(categoryId, success, error) {
console.log("Menu id is: " + $stateParams.menuId);
return $http.get(baseUrl + '/shops/' + $sessionStorage.currentShop.id + '/menus/' + $stateParams.menuId + '/categories/' + $stateParams.categoryId + '/items').success(success).error(error);
}
};
}]);
我希望能够在 getAll 方法中使用 $stateParams.menuId。届时,url为:
/menus/54/categories/56/items
但是 $stateParams 为空。我怎样才能得到它们?
解决这个问题的一种方法是在执行服务功能时从控制器传入stateParams。只需将其作为需要此数据的函数的参数,然后在执行这些函数时提供即可。
MetronicApp.factory('ItemService', ['$http', '$sessionStorage', function($http, $sessionStorage) {
return {
save: function(data, stateParams, success, error) {
return $http.post(baseUrl + '/shops/' + $sessionStorage.currentShop.id + '/menus/' + stateParams.menuId + '/categories/' + stateParams.categoryId + '/items', data).success(success).error(error);
},
update: function(data, stateParams, success, error) {
return $http.put(baseUrl + '/items/' + data.id, data).success(success).error(error);
},
saveTranslation: function(data, stateParams, success, error) {
return $http.post(baseUrl + '/itemTranslation', data).success(success).error(error);
},
get: function(itemId, stateParams, success, error) {
return $http.get(baseUrl + '/items/' + itemId).success(success).error(error);
},
getAll: function(categoryId, stateParams, success, error) {
console.log("Menu id is: " + stateParams.menuId);
return $http.get(baseUrl + '/shops/' + $sessionStorage.currentShop.id + '/menus/' + stateParams.menuId + '/categories/' + stateParams.categoryId + '/items').success(success).error(error);
}
};
}]);
这是我的服务:
MetronicApp.factory('ItemService', ['$http', '$sessionStorage', '$stateParams', function($http, $sessionStorage, $stateParams) {
return {
save: function(data, success, error) {
return $http.post(baseUrl + '/shops/' + $sessionStorage.currentShop.id + '/menus/' + $stateParams.menuId + '/categories/' + $stateParams.categoryId + '/items', data).success(success).error(error);
},
update: function(data, success, error) {
return $http.put(baseUrl + '/items/' + data.id, data).success(success).error(error);
},
saveTranslation: function(data, success, error) {
return $http.post(baseUrl + '/itemTranslation', data).success(success).error(error);
},
get: function(itemId, success, error) {
return $http.get(baseUrl + '/items/' + itemId).success(success).error(error);
},
getAll: function(categoryId, success, error) {
console.log("Menu id is: " + $stateParams.menuId);
return $http.get(baseUrl + '/shops/' + $sessionStorage.currentShop.id + '/menus/' + $stateParams.menuId + '/categories/' + $stateParams.categoryId + '/items').success(success).error(error);
}
};
}]);
我希望能够在 getAll 方法中使用 $stateParams.menuId。届时,url为:
/menus/54/categories/56/items
但是 $stateParams 为空。我怎样才能得到它们?
解决这个问题的一种方法是在执行服务功能时从控制器传入stateParams。只需将其作为需要此数据的函数的参数,然后在执行这些函数时提供即可。
MetronicApp.factory('ItemService', ['$http', '$sessionStorage', function($http, $sessionStorage) {
return {
save: function(data, stateParams, success, error) {
return $http.post(baseUrl + '/shops/' + $sessionStorage.currentShop.id + '/menus/' + stateParams.menuId + '/categories/' + stateParams.categoryId + '/items', data).success(success).error(error);
},
update: function(data, stateParams, success, error) {
return $http.put(baseUrl + '/items/' + data.id, data).success(success).error(error);
},
saveTranslation: function(data, stateParams, success, error) {
return $http.post(baseUrl + '/itemTranslation', data).success(success).error(error);
},
get: function(itemId, stateParams, success, error) {
return $http.get(baseUrl + '/items/' + itemId).success(success).error(error);
},
getAll: function(categoryId, stateParams, success, error) {
console.log("Menu id is: " + stateParams.menuId);
return $http.get(baseUrl + '/shops/' + $sessionStorage.currentShop.id + '/menus/' + stateParams.menuId + '/categories/' + stateParams.categoryId + '/items').success(success).error(error);
}
};
}]);