如何创建一个将参数传递给rest web服务的控制器?

How do I create a controller that passes a parameter to a rest web service

本文关键字:web rest 服务 控制器 参数传递 一个 何创建 创建      更新时间:2023-09-26
myApp.controller('consumeProduct', function($scope, $http, $log) {    
        $http({
            method: 'GET',
            url: 'http://localhost:8080/Products'
        }).then(function(response) {  
            $scope.products = response.data;
            $log.info(response);
        });
    });

上面有一个控制器,它从rest api中消费并返回所有产品。现在我想创建另一个控制器,它接受一个参数(一个字符串),并尝试使用这个参数并使用这个web服务('http://localhost:8080/Products/ProductName/parameter')。根据参数,服务应该返回一个特定的产品。我怎么能这么做呢?我试图创建一个服务javascript文件来消耗我所有的其他api资源。谢谢。

根据sabithpocker的建议,控制器应该只用于更新视图。你可能想为你的$http请求使用Service或Factory。下面是一个可能实现的示例:

myApp.factory('ProductFactory', function($http, $log) {
    var ProductFactory = {};
    ProductFactory.getProduct = function(productName) {
        return $http({
                method: 'GET',
                url: 'http://localhost:8080/Products/ProductName/' + productName
            })
            .then(function(response) {
                return response.data;
            })
            .catch($log.err);
    }
    return ProductFactory;
});
现在你需要把上面的工厂注入到你的控制器中:
myApp.controller('ProductCtrl', function($scope, $log, ProductFactory) {
    ProductFactory.getProduct('apple')
        .then(function(returnedProduct) {
            $scope.product = returnedProduct;
        })
        .catch($log.err);
});

如果你为你的$http进程使用工厂或服务,那么你可以在需要的时候随意重用它们(也可以用于其他控制器)。

例如,您可能有另一个视图,您希望在单击按钮时获取产品信息。所以重用你的工厂,你可能有第二个控制器如下:

myApp.controller('ProductListCtrl', function($scope, $log, ProductFactory) {
    $scope.productClick = function(productName) {
        ProductFactory.getProduct(productName)
            .then(function(returnedProduct) {
                $scope.product = returnedProduct;
            })
            .catch($log.err);
    }
})

在你的html中:

<td><button ng-click="productClick(product.name)">Show product</button></td>

我希望这对你有帮助。