2016-04-20 4 views
0

У меня возникла проблема с объединением данных из моей веб-службы, которые отправляют идентификатор выбранной строки в моей таблице и получают с этим идентификатором данные, это то, что я получаю в консоли:слияние двух массивов из службы в angularJS

my all Liste [{ I get only the data of finalOperationsList not with the $scope.liste data}] 

это мой код:

.factory('gammeMonatageFactory', function($http,$q){ 
    var backObject = { getListOperationsById:_getListOperationsById } 
    return backObject; 

    function _getListOperationsById(val){    
       var defer = $q.defer(); 
       $http({ 
        method : "GET", 
        url : "MyURL/getById:"+val 
       }).then(function mySucces(response) { 
        defer.resolve(response.data); 
       }, function myError(response) { 
        deferred.reject('Erreur into url '+response); 
       }); 

       return defer.promise; 
    };   
}); 

и это, как я назвал обслуживание:

$scope.modifierOuCreerArticle = function() {  
    var v = $scope.OperationsList[$scope.OperationsList.length-1].Id; 
    gammeMonatageFactory.getListOperationsById(v).then(function(Data){ 
     $scope.liste= JSON.parse(JSON.stringify(Data)); 
     //I get the Data of $scope.liste only here I can't get this Data  outside this call        
    }); 
    $scope.listfinal = $scope.finalOperationsList.concat($scope.liste); 
    console.log("my all Liste "+$listfinal); 
} 

любой он LP, пожалуйста, чтобы объединить 2 finalOperationsList и liste массивов спасибо за помощь

+1

Вы загружаете $ scope.list асинхронно, поэтому $ scope.list по-прежнему не определен, пока вы используете concat. –

ответ

2

При слиянии два массива, обратный вызов от вызова остального еще не был выполнен. Итак, вы должны объединить два списка в своем обратном вызове, когда установлены данные liste. Вы можете инициализировать $scope.listfinal пустым массивом или с некоторыми исходными данными. Таким образом, представление будет обновляться.

$scope.modifierOuCreerArticle = function() {  
    var v = $scope.OperationsList[$scope.OperationsList.length-1].Id; 
    gammeMonatageFactory.getListOperationsById(v).then(function(Data){ 
     $scope.liste = JSON.parse(JSON.stringify(Data)); 
     $scope.listfinal = $scope.finalOperationsList.concat($scope.liste); // concat the arrays when $scope.liste is available       
    }); 
    $scope.listfinal = $scope.finalOperationsList; // or initialize the list with empty array; 
    console.log("my all Liste " + $listfinal); 
} 
+0

благодарит за помощь^_^ – Jina

1

Другая вещь, которую я видел из вашего кода ваш service имеет вопрос против promise anti-pattern

внутри службы, то лучше быть:

function _getListOperationsById(val){ 
     //instead of create your own promise object, chaining the promise object returned by $http and return it 
     return $http({ 
      method : "GET", 
      url : "MyURL/getById:"+val 
     }).then(function mySucces(response) { 
      return response.data; 
     }, function myError(response) { 
      return $q.reject('Erreur into url '+response); 
     }); 
    }; 

Если вам не нужно иметь дело с ответом на обслуживание в качестве среднего уровня, я предлагаю немедленно вернуть результат:

function _getListOperationsById(val){ 
     //instead of create your own promise object, chaining the promise object returned by $http and return it 
     return $http({ 
      method : "GET", 
      url : "MyURL/getById:"+val 
     }); 
    }; 

И решение было дано другими людьми, вы должны объединить их вместе в возвращенном обещании then() функции.

+0

ОК спасибо сэр за вашу помощь^_ ^, я исправлю свой код – Jina

Смежные вопросы