2016-03-15 3 views
1

Можете ли вы помочь мне, пожалуйста, им новое в angularJS,

у меня есть проблемы с Asynchrounous $ http.get, я объясняю: я получил данные, которые я показываю в ngTable, но в моем HTML я получил пустую таблицу, пока я не щелкнул, чтобы фильтровать или сортировать, тогда я вижу свои данные.

Я думаю, это потому, что у меня есть обещание в моем http.get. вот мой код, чтобы понять больше (простите за мой английский)

'use strict'; 
(function() { 
    angular 
     .module('timeShareApp') 
     .controller('homeController', homeController); 


    function homeController($http, $scope, $filter, NgTableParams) { 

    $scope.users =[]; 

$http.get('/api/users/').success(function(response) { 
      $scope.users = response; 

     }); 

     $scope.usersTable = new NgTableParams({ 
       page: 1, 
       count: 10 
      }, { 
       total: $scope.users.length, 
       getData: function ($defer, params) { 
         $scope.data = params.sorting() ? $filter('orderBy')($scope.users, params.orderBy()) : $scope.users; 
         $scope.data = params.filter() ? $filter('filter')($scope.data, params.filter()) : $scope.data; 
         $scope.data = $scope.data.slice((params.page() - 1) * params.count(), params.page() * params.count()); 
         $defer.resolve($scope.data); 
       } 
      }); 





} 

    homeController.$inject = ["$http", "$scope", "$filter", "NgTableParams"]; 

})(); 

для информации: код работает отлично, за исключением того, что обещание я хочу, чтобы преобразовать в Синхронный если вы можете помочь мне, пожалуйста.

Спасибо заранее

+0

Можете ли вы попробовать '$ scope.users.concat.apply ($ scope.users, response);' вместо '$ scope.users = response;'? – dfsq

+0

еще одним хорошим решением является загрузка данных в службу и внедрение этой службы в ваш контроллер. Http://stackoverflow.com/questions/15161537/angularjs-load-data-from-service –

+0

Я отмечу, что я сменил машину (домашняя машина для работы машины (в работе), и она работает, не меняя ничего), но большое вам спасибо за вашу поддержку. я замечаю, что для следующей загрузки данных – AmenzO

ответ

2

В большинстве случаев нет никаких оснований хранить данные вне области ng-table. Мой совет заключается в том, чтобы не изменять или не ссылаться на какие-либо переменные области видимости, поскольку это может привести к довольно сложному отслеживанию проблем синхронизации.

Посмотрите на действительно хорошие документы ng-table, в которых в основном есть рабочий образец для вашего прецедента. See the docs here

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

$scope.loadData = function() { return $http.get('/api/users/') }; 

$scope.usersTable = new NgTableParams(
    { 
    page: 1, 
    count: 10 
    }, { 
    total: 0, // just the inital value - will be updated later on 
    getData: function ($defer, params) { 
     $scope.loadData().success(function (result) { 
     // assuming your result has a total and a data field... 

     // update the table params with the total amount of results 
     // could also be result.length... 
     params.total(result.total); 

     // sort and filter your data using the params object here 
     var data = result.data; 

     // give back the control to the table 
     $defer.resolve(data); 
     }); 
    } 
    } 
); 

Обратите внимание также установить params.total всякий раз, когда сервер отвечает. В противном случае разбиение на страницы не будет видно.

+0

Большое спасибо за вашу поддержку, я просто сменил машину, и теперь мой код работает отлично, но я замечаю, что для следующих разработчиков Большое вам спасибо – AmenzO

+0

@AmenzO, можете ли вы затем отметить ajaegle's ответ как принятый ответ? Так он работает на stackoverflow :). – Bart

+0

Спасибо, Барт за совет, в последний раз я читаю комментарий iwant, чтобы он ответил, но я не нашел ajaeagle под кнопками вверх-вниз :) Еще раз спасибо :) – AmenzO

2

Я думаю, что нет проблема- на добавление $scope.usersTable мне определенную внутри вашего метода обещания resolve. Вы пробовали это?

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