我想要一个刷新页面的按钮(请求 http 加载数据):
http://plnkr.co/edit/Ol6iEoLp037ZHu0P40Wr?p=preview
工厂刷新按钮 - - 不起作用
$scope.doRefresh = function() {
Content.content.success(function(data){
$scope.data = data.artists;
console.log($scope.data);
$scope.$broadcast('scroll.refreshComplete');
});
现在,当您删除一些数据并想要恢复主题时,您应该点击刷新按钮,但它不起作用。
工作演示
http://plnkr.co/edit/WHSEPxyQDi3YNkEP8irL?p=preview
$scope.doRefresh = function() {
$http.get("data.json")
.success(function(data) {
$scope.data = data.artists;
console.log($scope.data);
$scope.$broadcast('scroll.refreshComplete');
})
} 现在它正在使用 $http
我想用 factory 来做,但是我不能处理这个,有什么建议吗?
更新 *****
工厂
app.factory('Content', function ($http) {
return {
content: $http.get('data.json')
}
})
最佳答案
您必须告诉您的服务在每次请求内容时检索数据。
app.factory('Content', function ($http, $q) {
return {
getContent: function() {
var deferred = $q.defer();
$http.get('data.json').succes(function(data) {
deferred.resolve(data);
});
return deferred.promise;
}
}
})
然后在你的 Controller 中你可以做:
$scope.doRefresh = function() {
Content.getContent().then(function(data) {
$scope.data = data.artists;
console.log($scope.data);
$scope.$broadcast('scroll.refreshComplete');
});
您也可以只将数据缓存在工厂中并在不执行请求的情况下将其返回:
app.factory('Content', function($http, $q, $timeout) {
var originalData;
return {
getContent: function() {
var deferred = $q.defer();
if (!originalData) {
$http.get('data.json').succes(function(data) {
originalData = data;
deferred.resolve(data);
});
} else {
/// gonna use timeout to simulate async behaviour -- kinda hacky but it makes for a pretty interface
$timeout(function() {
defered.resolve(originalData);
}, 0);
}
return deferred.promise;
}
}
})
不过要小心,对返回对象所做的更改会影响原始数据对象。
关于javascript - 刷新按钮在 Angular 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294980/