没有超时更新$ scope?

时间:2014-06-02 03:32:09

标签: javascript angularjs

function armyController($scope, $http) {
  var no_errors = true;
  function getArmyData () {
    $http
      .get('/army')
      .success(function(data) {
        $scope.army = data;
        getArmyData();
      })
      .error(function(data) {
        console.log('Error: ' + data);
        no_errors = false;
      });
  }
  if (no_errors) {
    getArmyData();
  }
}

这个控制器有效,但有点难看。我应该如何以更低效的方式更新$ scope?

2 个答案:

答案 0 :(得分:3)

您应该使用服务来封装服务调用并维护您希望在各种控制器之间持久化的数据。您的控制器通常会以这种方式变得更加简单,请参阅我在此处撰写的示例Angular $http vs service vs ngResource

答案 1 :(得分:1)

你不应该在控制器中使用$ http作为头号规则。你能解释一下关于no_errors的更多信息吗,为什么你这样使用,这是重构后的代码

function armyController($scope, $http, Army) {
  var no_errors = true;

  function getArmyData() {
     Army.get().then(function(data) {
       $scope.army = data;
       getArmyData();
     }, function() {
       console.log('Error: ' + data);
       no_errors = false;
     })
  }
  if (no_errors) {
    getArmyData();
  }
}

Arm is angularjs factory which you define that $http or $resource