在AngularJS中,我试图将控制器调用中的参数传递给服务工厂。但是,我似乎无法获得传递的参数。该函数总是将我设置的内容传递给服务中的默认值。如果我不包含默认值,则不会传递任何内容。
例如,我的代码类似于:
控制器
...
Room.enter({room_id: '5'/*$scope.room_id*/}, function(return_data)
{
//Callback function stuff.
...
}
...
服务
...
services.factory('Room', ['$resource',
function($resource)
{
return $resource('/room/:room_id', {}, {
enter: {method: 'PUT', params:{room_id:'-1'}}
});
}
]);
...
这样即使我试图传递5,也会调用http资源“/ room / -1”。
如果我删除了“enter”方法的params部分,那么所有被调用的都是“/ room”。根本没有传递任何参数。
有关我做错的建议吗?非常感谢!
答案 0 :(得分:9)
尝试
services.factory('Room', ['$resource',
function($resource)
{
return $resource('/room/:room_id', {}, {
enter: {method: 'PUT', params:{room_id:'@room_id'}}
});
}
]);
编辑:
您的参数作为对象传递。因此,'@room_id'
表示应提取传递的对象的room_id
属性的值。
请注意,名称不得匹配。在你的控制器中,你也可以说
Room.enter({id: '5'}...
并获取服务中参数的值
..., params:{room_id:'@id'}