2017-01-16 68 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