javascript - 刷新按钮在 Angular 中不起作用

标签 javascript angularjs

我想要一个刷新页面的按钮(请求 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/

相关文章:

javascript - 将项目添加到模型并刷新第二次 ng-repeat

javascript - 处理多个 Promise 的结果

javascript - 使用服务根据点击事件更新 DOM

javascript - AngularJS 获取 'compiled html'

javascript - Angular Material 日期时间选择器

javascript - 如何调试 Angular 库错误?

javascript - 使用 JavaScript 时 PhantomJS 内存耗尽错误

javascript - R传单中的饼图,将计数变为总和并控制更多大小

javascript - 如何有条件地呈现逗号和句点?

javascript - 在使用 FileReader 上传之前预览图像,旋转图像