AngularJS:即使使用$ apply()也没有视图更改

时间:2014-04-28 02:18:47

标签: angularjs

此AngularJS应用程序中的删除功能大部分(记录已删除并显示成功消息),但视图未更新。

我尝试添加$scope.$apply(),但这只会给我$digest already in progress错误。但是如果摘要正在进行中,那不应该更新视图吗?这不是消化的作用吗?

视图

<button ng-click="deleteNote(note)">Delete</button>

控制器

LessonNotes.controller("NotesCtrl", ["$scope", "$routeParams", "$location", "Note", "NoteType", "Alert",
  function($scope, $routeParams, $location, Note, NoteType, Alert) {

    $scope.notes = Note.query();

    $scope.deleteNote = function(note) {
      if(confirm("Are you sure you want to delete this note?")) {
        note.$destroy(
          function(n, responseHeaders) {
            $scope.$apply();
            Alert.add("success", "Note deleted successfully!", 5000);
          },
          function() {
            Alert.add("warning", "There was an error deleting the note!", 5000);
          }
        );
      }
    };

}]);

服务

LessonNotes.factory("Note", ["$resource", function($resource) {
  return $resource("lesson_notes/notes/:id", { id: "@id" }, {
    query: { method: 'GET', params: {}, isArray: true },
    update: { method: 'PATCH' },
    destroy: { method: 'DELETE' }
  });
}]);

如果重要,我会在后端使用Rails。

1 个答案:

答案 0 :(得分:1)

要防止出现$digest already in progress错误,请尝试在Angular的$timeout函数中运行代码。

另外,你没有使用$ scope。$正确应用,你想在你的代码周围包装$ apply调用。

$timeout(function() {
    $scope.$apply(function() {
        note.$destroy...
    });
});