AngularJS - Controller资源调用没有将参数传递给服务工厂?

时间:2014-02-20 15:47:04

标签: javascript angularjs angularjs-service angular-resource

在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”。根本没有传递任何参数。

有关我做错的建议吗?非常感谢!

1 个答案:

答案 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'}