2017-10-12 113 views
0

我有一个函数,通过$http.Get方法从服务器获取数据。收到数据后我需要在另一个功能上使用它。任何人都可以帮助我如何使用这些数据。

var app = angular.module("app", []); 
    app.factory('itemsFactory', function ($http) { 
     var factory = {}; 
     factory.getItems = function() { 
      return $http.get('.//davidstrans.json') 
     }; 
     return factory; 
    }); 
    app.controller('UsersTransController', function ($scope, itemsFactory) { 
     itemsFactory.getItems().success(function (data) { 
      $scope.users = data; 
     });}); 

之后,我有一个功能动态获取类型:

function groupBy(arr, key) { 
      var newArr = [] 
       , types = {} 
       , newItem, i, j, cur; 
      for (i = 0, j = arr.length; i < j; i++) { 
       cur = arr[i]; 
       if (!(cur[key] in types)) { 
        types[cur[key]] = { 
         type: cur[key] 
         , data: [] 
        }; 
        newArr.push(types[cur[key]]); 
       } 
       types[cur[key]].data.push(cur); 
      } 
      return newArr; 
     }; 

这个功能我必须使用$scope.users=data;值。 任何人都可以帮助我吗?提前致谢。

+0

如何'$ scope.groupedUsers = GROUPBY($ scope.users '的myKey') ;'?只记得在你的承诺回调中调用它,否则'$ scope.users'变量不会被定义。并且使用'then(..)'而不是'success',因为后者已被弃用。 –

回答

-1

请在你的代码做出相应的改变:

var app = angular.module("app", []); 
app.factory('itemsFactory', function ($http) { 
    var factory = {}; 
    factory.getItems = function (successCallBack,errorCallBack) { 
     $http({ 
    method: 'GET', 
    url: './/davidstrans.json' 
}).then(function(response) { 
    // this callback will be called asynchronously 
    // when the response is available 
      successCallBack(response); 
    }, function(response) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
      errorCallBack(response); 
    }); 
    }; 
    return factory; 
}); 

和app.controller:

app.controller('UsersTransController', function ($scope, itemsFactory) { 
var successCallBack = function(data){ 
    $scope.users = data; 
} 
var errorCallBack = function (data){ 
    //if you want to show any error 
} 
    itemsFactory.getItems(successCallBack, errorCallBack); 
}); 
+0

这是一种反模式。请不要像这样传递回调。 'OP已经做了''返回$ http.get('.// davidstrans.json')'完全没问题 - 事实上它可能是最好的方式来做到这一点。 –

相关问题