2017-03-18 7 views
0

私は各項目の後、項目のリストを取得しているスクリプトを持って、私はデータは、コード内の一つのオブジェクトにAngularJsはその後

部品を定義し、データを結合する必要があります取得にパラメータを渡しますitemObjectDashboardFactory.Convert関数に渡したいと思います

これは可能ですか?これについてもっと良い方法がありますか?

現在、それはあなたがitemData約束があるときitemObjectへの正しい参照を保持するためのループのためにあなたにIIEFを使用する必要があるため、約束のメカニック

var items = BaseFunctionsService.GetData(result); 
console.log('success', items); 
if (items) 
{ 
    var itemdata = null; 
    var chartData = null; 
    var itemData = null; 
    var itemObject = null; 

    for (var i = 0; i < items.length; i++) { 
     itemObject = items[i]; 
     itemData = DashboardFactory.GetData(items[i]); 

     itemData.then(function (result) { 
      console.log('itemdata result', result); 
      itemdata = BaseFunctionsService.GetData(result); 
      chartData = DashboardFactory.Convert(itemObject, itemdata, result.data.Translations[result.data.LangKey]); 
      console.log('itemdata success', chartData); 
      $scope.data.push(chartData); 
     }, function (error) { 
      console.log('itemdata error', error); 
     }); 
    } 
    console.log('data output', $scope.data); 
} 
+0

あなたができる 'DasboardFactory.Convert.call(itemObject、/ * * /、残りの引数)'またはあなたが使用することができます '' this'参照になるだろうDashboardFactory.Convert.bind(itemObject) '、その関数参照では 'itemObject' – Jhecht

答えて

0

に項目の配列の最後の項目の値を持っていますこれは、forループのクロージャを持つ一般的なバグです。

var items = BaseFunctionsService.GetData(result); 
console.log('success', items); 
if (items) 
{ 
    var itemdata = null; 
    var chartData = null; 
    var itemData = null; 
    var itemObject = null; 

    for (var i = 0; i < items.length; i++) (function (i) { 
     itemObject = items[i]; 
     itemData = DashboardFactory.GetData(items[i]); 

     itemData.then(function (result) { 
      console.log('itemdata result', result); 
      itemdata = BaseFunctionsService.GetData(result); 
      chartData = DashboardFactory.Convert(itemObject, itemdata, result.data.Translations[result.data.LangKey]); 
      console.log('itemdata success', chartData); 
      $scope.data.push(chartData); 
     }, function (error) { 
      console.log('itemdata error', error); 
     }); 
    })(i); 
    console.log('data output', $scope.data); 
}