不使用全局变量的角度工厂中$ resource的动态URL

时间:2016-07-11 18:25:22

标签: angularjs factory mean-stack

如何在不使用$ rootScope的情况下从控制器传递URL的方式定义动态工厂?

  .factory('getData', function ($resource,$rootScope) {
        return $resource($rootScope.url, {id:'@id'}{
            'query': { method: 'GET', isArray: true},
            'get': {
                method: 'GET',
                isArray: true,

                transformResponse: function (data) {
                    data = angular.fromJson(data);
                    return data;
                }
            }
        });
    })

控制器

   var data = [];
            $rootScope.url='/userDetails/userId?userId=userID'
            getData.get({id:'123'}).$promise.then(function(data){
            angular.forEach(data,function(dataVal){
             //
            },data)

1 个答案:

答案 0 :(得分:4)

您应该在工厂中创建一个函数,然后在调用它时将URL和id作为参数传递给该函数。

对于您的代码,工厂应该看起来像这样:

.factory('getData', function($resource, $rootScope) {
  return {
    query: function(url, id){
      return $resource(url, {userId: id}, {
        'query': {
          method: 'GET',
          isArray:true
        },
        'get': {
          method: 'GET',
          isArray:true,

          transformResponse: function(data) {
            console.log(data);
            data = angular.fromJson(data);
            return data;
          }
        }
      }).get();
    }
  }
})

然后你会像控制器中的getData.query(url,id)一样调用它。