这是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非常简单,它以简单的表格格式显示这些信息。
答案 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
会返回一个承诺对象,该对象将包含我们可以收听的success
和error
个回调。
获取控制器内的promise并附加到回调,使我们可以访问控制器的范围(testCtrl
)。然后从回调内部我们用请求的响应更新testCtrl
的{{1}}属性。