如何从 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);
    }
};
}]);