Angularjs服务数据更新

时间:2013-04-05 05:45:59

标签: angularjs angularjs-service

这是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 个答案:

答案 0 :(得分: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
    })

}

$http会返回一个承诺对象,该对象将包含我们可以收听的successerror个回调。

获取控制器内的promise并附加到回调,使我们可以访问控制器的范围(testCtrl)。然后从回调内部我们用请求的响应更新testCtrl的{​​{1}}属性。