如何使 $resource 的 URL 通用?

How to make the URL of $resource generic?

我是 AngularJS 的新手,我有一个问题。

我正在使用 $resource 进行 CRUD 操作。

我目前有这样的代码,

angular.module("dopAngular.services")
.factory("UserRoleService", ["$resource",
    function ($resource) {
        return $resource("api/UserRoleApi", {}, {
            query: { method: "GET", isArray: true },
            create: { method: "POST" },
            get: { method: "GET" },
            remove: { method: "DELETE" },
            update: { method: "PUT" }
        });

    }]);

    //below is the code in my controller
              UserRoleService.query(function (data) {
                vm.UserRoleLookups = data;
            });

我想让我的 UserRoleService 通用,这意味着我不想在工厂级别为 API 提供特定的 URL。

我现在稍微修改一下我的代码,

angular.module("dopAngular.services")
.factory("UserRoleService", ["$resource",
    function ($resource, url) {
        return $resource(url, {}, {
            query: { method: "GET", isArray: true },
            create: { method: "POST" },
            get: { method: "GET" },
            remove: { method: "DELETE" },
            update: { method: "PUT" }
        });

    }]);

我的问题是我应该在控制器中做什么?

所以,我们可以用一个接受url作为参数的函数封装它,而不是直接返回$resource

像这样:

myApp.factory('UserRoleService', function($resource) {
  return {
    query: function(url) {
      return $resource(url, {}, {
        query: {
          method: "GET",
          isArray: true
        },
        get: {
          method: "GET"
        }
      });
    }
  }
});

现在,在控制器中,您可以这样调用它:

UserRoleService.query('//httpbin.org').get()

example fiddle