【问题标题】:AngularJS - Controller resource call not passing parameters to service factory?AngularJS - 控制器资源调用不将参数传递给服务工厂?
【发布时间】:2014-03-21 16:28:56
【问题描述】:

在 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”方法的参数部分,那么“/room”就是所有被调用的。根本没有传递任何参数。

关于我做错了什么有什么建议吗?非常感谢!

【问题讨论】:

    标签: javascript angularjs angularjs-service angular-resource


    【解决方案1】:

    试试

    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 函数时没有指定任何类似的参数。那么为什么会有所不同呢?
    • 我编辑了答案以添加解释。我希望它有所帮助。干杯
    猜你喜欢
    • 2014-11-07
    • 2015-08-06
    • 1970-01-01
    • 2015-09-13
    • 2014-11-10
    • 2014-06-03
    • 2014-05-09
    • 1970-01-01
    • 2014-05-02
    相关资源
    最近更新 更多