angular ngResource 将附加参数传递给 url

Joh*_*ohn 3 node.js angularjs ngresource

我有一个由多个任务资源组成的项目资源(类似于 Facebook 帖子和评论关系)

当我更新项目时,我想使用 url /project/[project id]。当我更新任务时,我想使用 url/project/[project id]/[task id]

这是我的项目资源服务:

angular.module('project').factory('Project', ['$resource', function($resource) {

    return $resource('project/:projectId', {
        projectId: '@_id'
    }, {
        update: {
            method: 'PUT'
        }
    })
}])
Run Code Online (Sandbox Code Playgroud)

现在我想定义任务资源:

angular.module('task').factory('Task', ['$resource', function($resource) {

    return $resource('project/:projectId/:taskId', {
        projectId: '' //how can i pass in the project Id from controller? 
        taskId: '@_id'
    }, {
        update: {
            method: 'PUT'
        }
    })

}])
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,如果我只是更新项目,而不是它的任务,那么我只需使用:

    $scope.update = function() {

        $scope.project.$update(function() {
            $location.path('project/' + $scope.project._id)
        }, function(errResponse) {
            $scope.error = errorResponse.data.message
        })
    }
Run Code Online (Sandbox Code Playgroud)

但是当我更新项目的任务时,我想传入项目来构建url。我怎样才能做到这一点?

请注意,项目和任务属于不同的模块。用户可以在项目详细信息页面或任务详细信息页面更新任务。

Hit*_*dha 5

工厂应该是这样的:

angular.module('task').factory('$task',function($resource){
        return $resource('project/:id/:taskid',
        {
                id: '@id',
                taskid: '@taskid'
        },{
                'update': {method: 'PUT'},
                'list': {method: 'GET'},
                'create':{method: 'POST'},
                'delete': {method: 'DELETE'}
        });
});
Run Code Online (Sandbox Code Playgroud)

在控制器中调用这个工厂:

$task.list({
    id : 1, // json prop name should be same as declared in factory
    taskid : 10
});
Run Code Online (Sandbox Code Playgroud)

这会将 ajax 请求发送到: /project/1/10

如果要更新任务,则必须提供其项目 ID。