首页 > 解决方案 > Angularjs 无法通过 $routeParams 来创建 $resource 的操作

问题描述

employee.service.js

angular.
  module('core.employee').
  factory('Employee', ['$resource',
    function($resource) {
      return $resource('http://127.0.0.1:8007/api/business/:businessId/employees/:employeeId', {}, {
        query: {
          method: 'GET',
          params: {businessId: '', employeeId: ''},
          isArray: true
        },
        create: {
          method: 'POST',
          params: {businessId: '', employeeId:''}
        },
      });
    }
  ]);

在我的控制器内部:

    self.employees = Employee.query({businessId: $routeParams.businessId}, function(employees) {

    });
    self.create = function(){
      Employee.create({
        businessId: $routeParams.businessId,
        email: self.email,
        access: self.access.value
      }).$promise.then(function(employee) {
        self.errorMsg = "";
        self.employee = employee;
      }, function(errResponse) {
        console.log($routeParams.businessId);
        self.errorMsg = errResponse["data"];
      });
    }

当前网址:http://127.0.0.1:8007/businesses/1/employees/create

我能够为query员工。但无法create。抛出的错误是:

angular.js:13018 POST http://127.0.0.1:8007/api/business//employees/ 404(未找到)

发布数据的实​​际 url 应该是:http://127.0.0.1:8007/api/business/1/employees/

这里businessId似乎没有传递给资源。但是在处理错误消息的函数内部:console.log($routeParams.businessId)给出1.

里面的路线config

when('/businesses/:businessId/employees/create', {
      template: '<employee-create></employee-create>'
    }).

标签: angularjs

解决方案


您尚未正确连接$resource您的请求参数以将请求参数映射到请求路径。

$resource(
  'http://127.0.0.1:8007/api/business/:businessId/employees/:employeeId',
  // Set up default parameters to extract values from the corresponding
  // properties when the resource is used
  { businessId: '@businessId', employeeId: '@employeeId' },
  {
    query: {
      method: 'GET',
      isArray: true
    },
    create: {
      method: 'POST',
    },
  });

未能映射参数会导致生成的请求路径缺少片段。

默认参数参数的文档提到了这种映射行为:

如果参数值以 为前缀@,则该参数的值将从数据对象的相应属性中提取(在使用请求正文调用操作时提供)。


推荐阅读