2016-05-07 4 views
0

私は角度サービス(ngResourceが持っているデータ)の配列を変更(フィルタリング)してから、変更したデータをコントローラに渡したいのですが、非同期動作が原因で固まっています。ngResourceによってフェッチされたデータを変更してそれを返す方法はありますか?

(function() { 
'use strict'; 

angular.module('app').factory('Report', ['Employee', function(Employee) { 

    var getReports = function(employeeId) { 

     return Employee.query({}, function(employees) { 
      return employees.filter(function(element) { 
       return employeeId === element.managerId; 
      }); 
     }); 

    }; 

    return { 
     query: function(employee) { 
      return getReports(parseInt(employee.employeeId)); 
     } 
    }; 

    }]); 
}()); 

そして、私はこのようなコントローラでそれを呼び出す:

は、ここでは、コードです

$scope.employees = Report.query({employeeId: $routeParams.employeeId}); 

私は上記のコードには2つの問題があります。

  1. そうでないと仕事:) getReports()はフィルタリングせずに、全従業員の配列を返します
  2. それはエレガントまたは保守的なデザインのようには思われません。その点で何が改善できるでしょうか?

答えて

1

あなたがフィルター上のさまざまな種類が必要な場合は、パラメータとして、フィルタ機能を渡すことができます。返信用

return { 
    query: function(employee, filterFunction) { 
     return getReports(parseInt(employee.employeeId)).filter(filterFunction); 
    } 
}; 


Report.query({employeeId: $routeParams.employeeId}, function (value) { 
    // extra filtering... 
}); 
+0

おかげで、それは私にはTypeError与える:。getReports(...)、その後ではありません関数 – Ketus

+0

あなたは正しいです私はあなたが約束に頼っていないことに気付きました。 – VRPF

+0

私は約束の周りに頭を浮かべているような気がします。お勧めの学習リソースを教えてもらえれば、それは大いに役立ちます。 – Ketus

関連する問題