如何从AngularJS中的服务访问$ stateParams?

时间:2015-04-29 11:16:52

标签: angular-ui-router angularjs-service

这是我的服务:

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。那时,网址是:

/menus/54/categories/56/items

但$ stateParams为null。我怎么能得到它们?

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是在执行服务功能时从控制器传入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);
    }
};
}]);