2013-04-05 6 views
0

Это основной вопрос об обслуживании angularjs.Обновление данных об обслуживании Angularjs

Я создал очень простое приложение, которое имеет следующий код.

var App = angular.module('testApp', ['testService']); 

App.config(['$routeProvider', function($routeProvider) 
{ 
    $routeProvider 
    .when('/', {templateUrl: 'partials/dataDisplay.html', controller: testCtrl}) 
    .otherwise({redirectTo: '/'}); 
}]); 

angular.module('testService', []). 
factory('svcTest', function($http){ 
    var myService = 
     { 
      getPeopleInfo: function() 
      { 
       $http.get('/test/app/data/getData.php').success(function(data) { 
        console.log("Data : " + data.people); 
        return data.people; 
       }); 
      } 
     }; 
    return myService; 
}); 


function testCtrl($scope, svcTest) { 
    $scope.people = svcTest.getPeopleInfo(); 
} 

Когда это делает '$ http.get', я на самом деле получить данные (и даже getData.php также возвращает действительный JSON.). Однако данные никогда не обновляются до testCtrl. Не уверен, что я делаю что-то очень глупо, будучи новичком в Angularjs.

Однако, если я избавлюсь от сервисов и добавлю http.get внутри контроллера, данные будут восстановлены и обновлены до представлений.

function testCtrl($scope, $http) { 
     $http.get('/test/app/data/getData.php').success(function(data) { 
       $scope.people = data.people; 
     }); 
} 

Какова основная проблема с кодом, который я использую с сервисами?

BTW, мой HTML очень прост, который отображает эту информацию в простом формате таблицы.

ответ

1

Пожалуйста, перепишите код, как показано ниже,

angular.module('testService', []). 
factory('svcTest', function($http){ 
    var myService = 
     { 
      getPeopleInfo: function() 
      { 
       return $http.get('/test/app/data/getData.php') 
      } 
     }; 
    return myService; 
}); 

function testCtrl($scope, svcTest) { 
    var peoplesPromise = svcTest.getPeopleInfo(); 
    peoplesPromise.success(function(data){ 
     $scope.people = data.people 
    }) 

} 

The $http возвращает объект обещание, которое будет иметь success и error обратные вызовы, на которые мы можем слушать.

Получение обещания внутри контроллера и присоединение к обратным вызовам дает нам доступ к области управления контроллером (testCtrl). Затем изнутри обратного вызова мы обновляем свойство testCtrlpeople с ответом от запроса.

+0

Спасибо, что ответили на мой очень простой вопрос. – sudhr