在angularJS中,我写了一个指令来显示数据。此数据由http服务从远程数据库获取。
如果我在代码中应用以下timeout服务,那么结果将在html页面上显示为http服务在一秒钟返回。
$timeout(function () {
$scope.treeRoot = $scope.$eval('serviceResult') || {};
}, 1000);
如果我不使用超时服务,那么页面不会显示任何数据,因为$scope。treeRoot为空,例如
$scope.treeRoot = $scope.$eval('serviceResult') || {};
在生产环境中,http服务可能需要超过一秒的时间才能返回,是否有通用的解决方案
你应该使用Angular的promises或$http服务,它们允许返回一个承诺。
在承诺(例如$http请求)被解析后,你可以用结果填充$scope.treeRoot
。
如果有帮助请告诉我。
正如在一个答案中建议的那样,您必须使用$http承诺并在响应中捕获结果。
下面是一个带有一些代码的示例。
服务:app.factory('myService', ['$http',
function($http){
var obj = {};
obj.get = function (q) {
return $http.get('/your_get_url')
};
obj.post = function (q, object) {
return $http.post('/your_post_url', object)
};
return obj;
}
]);
在控制器中,
allControllers.controller('changePasswordController', ['$scope','myService',
function($scope,myService) {
myService.get().then(function (result) {
$scope.treeRoot = 'use your result here'
},function error(result)
{
console.log(result)
})
}
])