我是Angularjs
的初学者,所以我想问你是否有更好的方法来解决我的问题。
我需要每隔30秒更新一次带有ajax调用的<div>
内容。
HTML
<div>
<div>{{test.value}}</div>
</div>
我的想法是在$interval
上使用service
,如下所示:
.service('eedisplayService', function($q, $http, $interval){
this.getData = function(url, variable){
$interval(function (){
var deferred = $q.defer();
$http.get(url)
.success(function(data){
if (data){
variable.value = data
} else {
deferred.reject('Wrong response');
}
})
.error(function(){
deferred.reject();
});
return deferred.promise
},30000);
}
});
从controller
拨打服务,如下所示:
.controller('displayCtrl', function($scope, config, eedisplayService){
var url = "myUrl";
$scope.test = {value : "" };
eedisplayService.getData(url, $scope.test);
});
它是完全AngularJs方法吗?代码有效,但是从控制器调用$interval
的服务是个不错的选择吗?是不是更好地从config
调用它?
我查了很多例子,但我真的不明白什么是最好的方法。
非常感谢。
此致
答案 0 :(得分:1)
您可以考虑将$interval
功能放在控制器中,这样您的服务就可以更通用/可重复使用。
同样$http
会返回自己的承诺,因此您不一定需要手动执行此操作:
// your service
.service('eedisplayService', function($http){
this.getData = function(url) {
return $http.get(url);
}
});
// controller
...
$interval(function() {
eedisplayService.getData(...)
.then(function(response) {
// update the content in the view
})
}, 30000);