在 Angular 中重新加载数据

Reload Data in Angular

我尝试重新加载数据按钮。这是我的 json:

    [
        {
            "name": "AAAAAA",
            "data": "False"

        },

        {
            "name": "BBBBBB",
            "data": "45%"
        },
        {
            "name": "CCCCC",
            "data": "12%"
        }
]

我的javascript:

app.service('service', function($http, $q) {

  var deferred = $q.defer();

  $http.get('names.json').then(function(data) {
    deferred.resolve(data);
  });

  this.getNames = function() {
    return deferred.promise;
  }
});

app.controller('FirstCtrl', function($scope, service, $http) {
  var vm = this;
  vm.reloadData = function() {
    console.log("reloading");
    vm.loadData();
  };

  vm.loadData = function() {
    var promise = service.getNames();
    promise.then(function(data) {
      $scope.names = data.data;
      console.log($scope.names);
    });
  }

  vm.loadData();
});

我的 HTML :

    <div ng-controller="FirstCtrl as vm">
      <table>
        <tbody>
          <tr ng-repeat="name in names">
            <td>{{name.name}}</td>
            <td>{{name.data}}</td>
          </tr>
        </tbody>
      </table>
      <button ng-click="vm.reloadData()">Reload</button>
    </div>

我的数据应该在点击功能后重新加载 "vm.reloadData()" 但是没有任何反应,我的数据没有刷新。 提前感谢您的回答。

根据您的实施,您正在坚持服务中的承诺,该承诺已经解决。

您应该在 getNames() 服务方法中定义 deferred

app.service('service', function ($http, $q) {
    this.getNames = function () {
        var deferred = $q.defer();
        $http.get('names.json').then(function (data) {
            deferred.resolve(data);
        });
        return deferred.promise;
    }
});

将您的 service 代码更改为

this.getNames = function() {
   return $http.get('names.json');
}

试试这个:

  1. 我已经删除了你作为 $http 本身的额外承诺 return 承诺..
  2. 添加了不在 缓存中保留请求数据的规定

       app.service('service', function($http, $q) {
          this.getNames = function() {
             return $http.get('names.json', { cache: false});
          }
        });
    
        app.controller('FirstCtrl', function($scope, service) {
          var vm = this;
          vm.reloadData = function() {
            console.log("reloading");
            vm.loadData();
          };
    
          vm.loadData = function() {
            var promise = service.getNames();
            promise.then(function(data) {
              $scope.names = data.data;
              console.log($scope.names);
            });
          }
    
          vm.loadData();
        });