2015-08-30 124 views
1

工作,我想有一个按钮,刷新页面(请求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

我想与工厂做,但我不能处理这个问题,任何意见?

更新 *****

app.factory('Content', function ($http) { 
    return { 
     content: $http.get('data.json') 
    } 
}) 
+0

是什么内容呢?你能分享它的代码吗? – toskv

+0

内容= app.factory( '内容',函数($ HTTP){ 返回{ 内容:$ http.get( 'data.json') } }) – sani

+0

请求data.json和调用工厂在控制器中 – sani

回答

2

你一定要告诉你的服务于每一个被请求的内容时检索数据。

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

然后在你的控制器,你可以这样做:

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

小心,变化会影响originalData对象。

+0

感谢的人,教我很多 – sani

+1

是啊,要小心。当我使用$ q.defer()而没有成功响应时,我的浏览器已经冻结。因为它向API –

2
app.factory('Content', function ($http) { 
    function getContent(onSuccess) { 
     $http.get('data.json').success(function (data) { 
      if (onSuccess) { 
       onSuccess(data) 
      } 
     } 
    } 

    return { 
     content: getContent 
    } 
}) 

在你的控制器:

$scope.doRefresh = function() { 
    Content.content(function (data) { 

     $scope.data = data.artists; 
     console.log($scope.data); 
     $scope.$broadcast('scroll.refreshComplete'); 
    }); 
}; 
+0

发送了很多请求,感谢您的回答 – sani