(Angular) Problema na substituição de parâmetro na URL do $resource

2 respostas Resolvido
javascriptprogramaçãoangular
M

Estou com problema na substituição do parâmetro passado para meu resource na hora da chamado do método get().

Exemplo:

controller.js

clientService.getClients().get({id:$routeParams.id})
    .$promise.then(
    function (response) {
        $scope.client = response;
    },function (error) {
        $scope.message = 'Error: ' + error;
    }
    );

service.js

return $resource(baseURL+'client/:id',null,{'update':{method:'PUT'}});

No meu service aparentemente não está substituindo o parâmetro :id pelo valor correto, exemplo 1. Quando eu substituo :id por um valor numérico para teste ele funciona normalmente. Quando não, ele estoura um erro na console, TypeError: encodeUriSegment is not a function.

Isso está acontecendo mesmo quando coloco um valor fixo na chamada do get também, por exemplo recursoFoto.get({fotoId: 1},function ...

Segue os arquivo completo:

app.js

'use strict';

angular.module('serviceOrder',['ngRoute','ngResource'])
    .config(function ($routeProvider,$locationProvider) {
        $routeProvider.when('/clients', {
            templateUrl: 'views/clients.html',
            controller: 'ClientController'
        });

        $routeProvider.when('/newclient',{
            templateUrl: 'views/client.html',
            controller: 'NewClientController'
        });

        $routeProvider.when('/editclient/:id',{
            templateUrl: 'views/client.html',
            controller: 'EditClientController'
        });

        $routeProvider.otherwise({redirectTo: '/clients'});
    });

controller.js

angular.module('serviceOrder')
.controller('EditClientController',['$scope','$routeParams','clientService',
        function ($scope,$routeParams,clientService) {
            $scope.message = 'Loading ...';
            $scope.client = {};
            $scope.phone = {id:'',brand:'',model:'',state:'',esn:''};
            debugger;
            clientService.getClients().get({id:$routeParams.id})
                .$promise.then(
                function (response) {
                    $scope.client = response;
                },function (error) {
                    $scope.message = 'Error: ' + error;
                }
                );

    }]);

service.js

'use strict';

angular.module('serviceOrder')
    .constant('baseURL', 'http://localhost:8080/service-order-rest/rest/')
    .service('clientService',['$resource','baseURL',function ($resource,baseURL){
        this.getClients = function () {
            return $resource(baseURL+'client/:id',null,{'update':{method:'PUT'}});
        };
    }]);

2 Respostas

R

Tenta alterar algo assim:

return $resource(baseURL+'client/:id',{},{'update':{method:'PUT'}});
M
Solucao aceita

@RaulCrash obrigado pela responsta.

Eu já tinha tentado o que você sugeriu também, só que mesmo assim.

O verdadeiro problema estava no conflitos das versões do angular e do ngResource, corrigi isso igualando as duas versões.

Criado 19 de dezembro de 2016
Ultima resposta 21 de dez. de 2016
Respostas 2
Participantes 2