如何以不使用$ 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)

最佳答案

您应该在工厂中创建一个函数,然后在调用它时将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)调用它。

10-05 20:53
查看更多