AngularJS - 控制器调用资源未将参数传递到服务工厂?

4
在AngularJS中,我试图在Controller调用中传递一个参数给Service工厂。然而,我似乎无法传递该参数。该函数总是传递我在Service中设置的默认值。如果我不包含默认值,则不会传递任何内容。
例如,我的代码类似于:
控制器:
...
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”方法中的参数部分,则仅调用“/room”。根本没有传递任何参数。

请问我做错了什么?非常感谢!

1个回答

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

可以这样做。能否解释一下为什么?看了一下AngularJS教程,当向资源的get函数传递参数时,他们没有指定任何像这样的参数。那么为什么会有所不同呢? - golmschenk
我编辑了答案并添加了解释。希望能有所帮助。干杯! - kubuntu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接