0

这是关于 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;
        });
}

我在服务中使用的代码的根本问题是什么?

顺便说一句,我的 HTML 非常简单,它以简单的表格格式显示这些信息。

4

1 回答 1

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
    })

}

返回一个 Promise 对象,该$http对象将具有我们可以监听的回调successerror

在控制器中获取承诺并附加到回调中,使我们能够访问控制器的范围(testCtrl)。然后在回调内部,我们使用请求的响应更新testCtrl'属性。people

于 2013-04-05T06:08:13.327 回答