AngularJs,如何为$ http发送params得到

时间:2017-08-21 00:34:35

标签: javascript angularjs angular-ui-router

我试图通过url将标识符的值传递给快速路由器,我要传递的变量是我从$ routeParams.IDR正确获取的IDR,现在我必须传递它$ http,但我无法做到。

那是我的controller.js ($ routeParams.IDR工作正常)

app.controller("rutaDestinosCtrl", function($scope, $http, userService, $routeParams){      

        vm = this;          
        vm.destinos = [];
        var requestData = {
            'IDR': $routeParams.IDR //$routeParams.IDR is for example: 5
        };


        vm.funciones = {

            obtenerDestinos : function(){                
            $http({
                 method: "GET",
                 url: '/privadas/rutas/obtenerDestinosRuta',
                 requestData,  
                 headers: {'auth-token': userService.token}
            })
                 .then(function(respuesta){
                    vm.destinos = respuesta.data.data;                                      
                }, function(respuesta){
                    console.log("Error:", respuesta.status);
                })   

            } //obtenerDestinos

        }//funciones  

        vm.funciones.obtenerDestinos();
});

传递令牌过滤器并正确到达此方法后:

router.get('/obtenerDestinosRuta', function(req,res){

    var query = "SELECT * FROM public.\"Destino\" D " +
            " JOIN public.\"RutaDestino\" RD ON D.\"IDD\" = RD.\"IDD\"" +
            " WHERE \"IDR\" = " + req.body.IDR+ " ORDER BY D.\"IDD\" ASC";

    console.log(query);

    db.query(query).spread(function(result, metadata){
        res.json({
            data: result
        })
    }).catch(function(err){
        res.status(500).send("Error: "+ err);
    })

});

我无法获得我在RequestData中存储的值(这将是5),我在控制台" req.body.IDR"中尝试了几种没有结果的方法。未定义,如果我改变" req.body.IDR"在价值5的陈述中,完美地运作,任何关于如何做到的想法?

这是来自console.log:

的查询结果
  

SELECT * FROM public。" Destino" D加入公众。" RutaDestino" RD ON   d" IDD" = RD。" IDD"在哪里" IDR" = 未定义订购D。" IDD" ASC

问候。

2 个答案:

答案 0 :(得分:2)

你能把你的路线定义吗?

在路线定义中,您必须指定预期参数,如:

module.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/routeName/:IDR', {templateUrl: 'template.html', controller: myCtrl})
}]);

请注意":IDR"路线中的价值。

然后在您的控制器中,您可以使用$ routeParams.IDR

访问它

答案 1 :(得分:-1)

谢谢大家,最后我找到了同样问题的其他帖子:angular.http params

但是,在简历中,Angular.http提供了一个由$ http发送params的选项,名为' params'。如果你必须使用方法" GET"那就很好。在我的情况下,使用它后,工作完美。这是我的代码:

在controller.js上我使用了 params config

app.controller("rutaDestinosCtrl", function($scope, $http, userService, $routeParams){      
    console.log("Controlador rutaDestinosCtrl");        
        vm = this; 

        vm.destinos = [];

        vm.funciones = {

            obtenerDestinos : function(){                
                var data = {
                    IDR: $routeParams.IDR
                };

                var config = {
                     params: data,
                     headers : {'auth-token': userService.token}
                };

                 $http.get('/privadas/rutas/obtenerDestinosRuta', config)
                 .then(function(respuesta){
                    //Acciones cuando sea una respuesta correcta
                    vm.destinos = respuesta.data.data;                                      
                }, function(respuesta){
                    //Acciones cuando sea una respuesta erronea
                    console.log("Error:", respuesta.status);
                })   

            } //obtenerDestinos

        }//funciones  

        vm.funciones.obtenerDestinos();
});

为了获得IDR的价值,我使用了 req.query.IDR

router.get('/obtenerDestinosRuta', function(req,res){

    console.log(req.query.IDR);

    var query = "SELECT * FROM public.\"Destino\" D " +
            " JOIN public.\"RutaDestino\" RD ON D.\"IDD\" = RD.\"IDD\"" +
            " WHERE \"IDR\" = " + req.query.IDR + " ORDER BY D.\"IDD\" ASC";

    console.log(query);

    db.query(query).spread(function(result, metadata){
        res.json({
            data: result
        })
    }).catch(function(err){
        res.status(500).send("Error: "+ err);
    })

});