2017-01-16 64 views
1

我尝试从2个jsons获取数据:

一号 'names.json':

[ 
     { 
      "name": "AAAAAA", 
      "down": "False" 

     }, 

     { 
      "name": "BBBBBB", 
      "down": "45%" 
     }, 
     { 
      "name": "CCCCC", 
      "down": "12%" 
     } 
] 

二 'data.json'

[ 
     { 
      "data": "25-12-2014" 
     } 
] 

Javascript:

app.service('service', function($http){ 
     this.getNames = function() { 
      var data = $http.get('data,json', { cache: false}); 
      var names = $http.get('names.json', { cache: false}); 
      return names; 
      return data; 
      }; 
     }); 

app.controller('FirstCtrl', function($scope, service) { 
var promise = service.getNames(); 
      promise.then(function (data) { 
      $scope.datas = data.data;  
      console.log($scope.datas); 
      }); 
     }) 

HTML

div ng-controller="FirstCtrl" 
    <table> 
     <tbody> 
      <tr ng-repeat="name in datas"> 
      <td>{{name.name}}</td> 
      <td>{{name.data}}</td> 
      </tr> 
     </tbody> 
     </table> 
    </div> 

在我的console.log和表格,我只看到JSON“names.json”的数据,但我想也看到提前从“data.json” 谢谢你的数据。

+1

你的第二个** **回报不会被打 – Weedoze

+1

一个函数可以有一个回报.... anythi ng之后,将不会执行,因为该功能将退出 – charlietfl

回答

3

你应该一起返回两个承诺,你不能在一个函数中返回两个。在这种情况下,$q.all会有所帮助。只有

代码

//inject $q in service function 
this.getNames = function() { 
    var data = $http.get('data,json', { cache: false}); 
    var names = $http.get('names.json', { cache: false}); 
    return $q.all([data, names]); 
}; 

控制器

var promise = service.getNames(); 
promise.then(function (data) { 
    $scope.datas = data[0].data; 
    $scope.names = data[1].data; 
}); 
+2

并记得注入'$ q' – charlietfl

+0

@charlietfl在那里添加注释,感谢您的领导:) –

+0

最佳解决方案!你想比我快:) – AlainIb

0

更改代码这个

app.service('service', function($http) { 
    return{ 
     getData : function(){ 
      return $http.get('data,json', { cache: false }); 
     }, 
     getNames : function(){ 
      return $http.get('names.json', { cache: false }); 
     } 
    } 

}); 

app.controller('FirstCtrl', function($scope, service, $q) { 
    $q.all([service.getData(), service.getNames()]).then(function(response){ 
     $scope.data = response[0].data; 
     $scope.names = response[1].data: 
    }); 
}) 
+0

如果OP想要两个数据在同一时间这不是有用的。 Pankaj Parkar解决方案是最好的,因为它同时返回(假设你想要5个文件数据) – AlainIb

+0

@AlainIb更新 – Weedoze

+0

是的,你的方法也适用。我不知道在服务端做$ q承诺是否更好,万一你需要多次这个服务可能更好地将服务端代码分解。 – AlainIb