Я хочу получить значения двух объектов в том же ng-repeat
$http.get('/api/PreviewPayroll').success(function (data){
//alert(data[0].empID);
$scope.allowance = data;
});
$http.get('/api/Deduction').success(function (data){
//alert(data[0].empID);
$scope.Deduction = data;
});
<tr ng-repeat="item in allowance && ng-repeat="value in Deduction">
<td>{{ item.empID }}</td>
<td>{{ value.empID }}</td>
</tr>
как я могу получить два объекта scope на том же ng-repeat
Таким образом, вы захотите объединить данные.
Вы можете использовать $q.all(promises)
:
var promise1 = $http.get('/api/PreviewPayroll');
var promise2 = $http.get('/api/Deduction');
$q.all([promise1, promise2]).then(function (results) {
var allowances = results[0];
var deductions = results[1];
var combinedList = /* some combination logic */;
});
Используя $q.all()
вы гарантируете, что у вас есть оба списка данных, прежде чем пытаться объединить что-либо. Вы можете легко поиграть с этим, чтобы получить желаемый эффект. Например, если вам все равно, доступен ли другой список.
Затем вы можете использовать ng-repeat
, чтобы перебрать этот новый комбинированный список:
<tr ng-repeat="item in combinedList">
<td>{{ item.allowance.empID }}</td>
<td>{{ item.deduction.empID }}</td>
</tr>
allowance
и deduction
суб-свойств основаны на вашем объединенном списке.
По моему честному мнению, серверная сторона дает вам данные в формате, который вам нужно отображать. (То есть бизнес-логика остается на стороне сервера в контролируемой среде). Я считаю, что мнение должно касаться только логики представления, например, действий кнопок и т.д.
Но это мое мнение, и это то, что я считаю самым легким.
Я предпочитаю также сохранять логику представления в JavaScript, поэтому я объединять данные там. Вместо того, чтобы пытаться сделать слишком сложное угловое выражение в HTML.
$q.all([promise1, promise2])
... аргумент - массив или хэш обещаний, а не несколько аргументов
Вы можете либо иметь вложенный ng-repeat
и объединить two objects
в один.
<table>
<tbody ng-repeat="row in mainCombinedObject">
<tr>
<th>{{row.empID}}</th>
</tr>
<tr ng-repeat="sub in row.subObject">
<td>{{sub.empID}}</td>
</tr>
</tbody>
</table>
Объедините $scope.allowance
и $scope.Deduction
к одному списку объектов "combined"
затем выполните свое ng-repeat
:
<tr ng-repeat="c in combined">
<td>{{ c.someField }}</td>
<td>{{ c.someOtherField }}</td>
</tr>
Вы не можете так поступать! Если ваше пособие и дедукция имеют одинаковый размер, вы должны смешать их в коллекции следующим образом:
var array = [
{ allowance: value1, Deduction: value2},
{ allowance: value3, Deduction: value4},
...
];
и они используют его в представлении:
<tr ng-repeat="item in array">
<td>{{ item.allowance.empID }}</td>
<td>{{ item.Deduction.empID }}</td>
</tr>
[ { deduction: ...., allowance: .... }, .... ]
затемng-repeat="item in list"
и затемitem.deduction.empID
илиitem.allowance.empID
$http
запроса, а не 2 контроллера