как получить результат двух контроллеров по ng-repeat

0

Я хочу получить значения двух объектов в том же 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

  • 0
    Если вы хотите повторить более двух списков, то объедините списки в один! будет что-то вроде [ { deduction: ...., allowance: .... }, .... ] затем ng-repeat="item in list" и затем item.deduction.empID или item.allowance.empID
  • 0
    Обратите внимание, что название вводит в заблуждение. Это 2 $http запроса, а не 2 контроллера
Показать ещё 1 комментарий
Теги:
asp.net-web-api

4 ответа

4
Лучший ответ

Таким образом, вы захотите объединить данные.

Вы можете использовать $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.

  • 0
    $q.all([promise1, promise2]) ... аргумент - массив или хэш обещаний, а не несколько аргументов
  • 0
    @charlietfl Конечно, внес изменения!
Показать ещё 2 комментария
0

Вы можете либо иметь вложенный 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>
0

Объедините $scope.allowance и $scope.Deduction к одному списку объектов "combined" затем выполните свое ng-repeat:

 <tr ng-repeat="c in combined">
        <td>{{ c.someField }}</td>
        <td>{{ c.someOtherField }}</td>
    </tr>
  • 0
    Объединить их где? Отсутствует важная часть этого вопроса
  • 0
    Детали соответствуют требованиям ОП
Показать ещё 1 комментарий
-1

Вы не можете так поступать! Если ваше пособие и дедукция имеют одинаковый размер, вы должны смешать их в коллекции следующим образом:

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>
  • 0
    Используя те, которые получают запрос от angularJS, как сделать их массивом объектов?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню