2016-11-10 3 views
1

У меня есть Угловое обслуживание с функцией:Как передавать данные с контроллера на обслуживание?

// service.js 

function DoSomething($resource) { 
    var resourceUrl = 'right/here'; 
    return $resource(resourceUrl, {}, { 
    'action': { 
     method: 'POST' 
    } 
    }); 
} 

и @RestController с 2 параметрами (param1, param2).

Когда я использую сервис так:

// service.js 

function DoSomething($resource) { 
    var resourceUrl = 'right/here'; 

    return $resource(resourceUrl, { param1: "abc", param2: "def" }, { 
    'action': { 
     method: 'POST' 
    } 
    }); 
} 

Он отлично работает. Но когда я хочу передать эти значения из моего контроллера, например:

// controller.js 

DoSomething.action(
    { param1: "abc" }, 
    { param2: "def" } 
); 

В то время как служба часть остается пустой

// service.js 

return $resource(resourceUrl, {}, { 

Мой @RestController получает только одно значение - первый слева. Как это решить?

+0

Вы хотите передать 'param1' &' param2' с контроллера? – Aruna

+0

Да, это именно то, что я хочу сделать, я думал, что это было ясно :) – tomwyn

+0

Да, просто хочу подтвердить, и я обновил ответ ниже. Пожалуйста, смотрите. – Aruna

ответ

1

С $resource(resourceUrl, {}, {, вы можете передать параметры из вашего controllwe, как показано ниже,

//controller.js 

DoSomething.action({}, {param1: "abc", param2: "def"}); 
+0

Это не работает :(Я хочу передать два отдельных значения из моего контроллера в мою службу, чтобы служба могла передать их в RestController, который определяется следующим образом: public void m (в RequestParam String param1, в RequestParam String param2); – tomwyn

+1

Тот, который вы сказали 'return $ resource (resourceUrl, {param1:" abc ", param2:" def "}, {' работает правильно, а контроллер точно отправляет то же самое, и он должен быть таким. Поскольку этот объект будет добавлен как 'request body' json. Следовательно, вы не можете иметь два объекта body. Если вы объясните/опубликуете код, почему ваш контроллер ожидает два параметра, я могу предложить изменить это. – Aruna

+0

Можете ли вы опубликовать код контроллера в вопрос? Я посмотрю. – Aruna

0

Поскольку метод действия является POST. Требуется объект данных.

var paramObj = {param1: value1, param2: value2}; 
var dataObj = {}; 

DoSomething.action(paramObj, dataObj); 

Параметры, определенные paramObj добавляются в качестве параметров запроса:

resourceUrl + "?param1=value1&param2=value2" 

dataObj кодируется в виде строки JSON и поместить в теле POST.

Если метод действия (POST) вызывается только с одним аргументом:

DoSomething.action(dataObj); 

в $ службы ресурс stringifies в dataObj и помещает его в теле POST. Параметры URL взяты из значений по умолчанию, заданных ресурсом $.

Смежные вопросы