为什么角度没有重新渲染?

时间:2016-01-11 07:30:17

标签: angularjs angularjs-scope

当我在html中调用$ scope.remove时,它会调用rerender函数,然后自动更新html中的数据。

当我调用$ scope.post时,它会调用rerender函数并记录新数据。但是,它不会自动重新呈现html。我必须刷新页面才能看到最新的数据。

我已经考虑过使用$ apply但是我很困惑它是如何更新删除但不是发布。

控制器:

var updateData = function (resp){
  $scope.data = resp.data;
  console.log($scope.data);
}

$scope.getEntries = function (){
  return $http({
    method: 'GET',
    url: '/allEntries'
  }).then(updateData)
};

$scope.post = function (){
  return $http({
    method: 'POST',
    url: '/newEntry',
    data: $scope.entry
  }).then(function (resp){
    $scope.getEntries();
  })
};

$scope.remove = function (opp){
  return $http({
    method: 'POST',
    url: '/deleteEntry',
    data: opp
  }).then(function (){
    $scope.getEntries();
  })
}

我认为这可能与在不同的html文件中调用函数有关,但由于它们都具有相同的控制器,我认为情况并非如此。

<html>
  <body ng-app = "app">
    <div ng-controller = "controller">
    <form ng-submit = "post()">
      <input type="submit" value="Submit">
    </form>
  </div>
  </body>
</html>`

<html>
  <body ng-app = "app">
    <div ng-controller = "controller">
    <ul>
      <li ng-repeat = "job in data" ><input type = "button" ng-click = "remove(opp)" value="Delete"></li>
    </ul>
  </div>
  </body>
</html>`

1 个答案:

答案 0 :(得分:0)

实际上,你有两个不同的部分,每个部分都有自己的控制器,因此每个部分都有自己的范围:

  • 显示项目列表的文件
  • 一个没有显示任何东西的人

您从未显示任何内容的部分发布,因此会刷新该部分范围内的列表,但仍然无法显示任何内容。

因此,简而言之,两个部分都没有相同的控制器。它们具有不同的控制器实例,并且这些实例恰好具有相同的类型。但他们仍然彼此完全独立。

实际上,重读你的问题,实际上比这更糟糕。您似乎打开了两个浏览器选项卡或框架。您正在从其中一个选项卡发布,并希望另一个选项卡将自动刷新。这不会发生:两个标签是完全独立的应用程序。