1

我对 $http.delete() 和 $window.location.reload() 函数有一个有趣的问题。基本上我正在调用一个删除方法,该方法又调用 $http.delete() 调用,该调用 - 使用 REST API 接口 - 从数据库(mongoDB)中删除数据。由于未知的原因,这是正在发生的事情:

  • 在数据库中删除成功
    • 这已得到验证,因为数据不再在数据库中
    • 还使用 Chrome DevTools 监控它显示状态:200
  • $window.location.reload() 被调用并且没有任何反应
    • Chrome DevTools 显示对域根目录的 GET 调用,但状态为“待定”

页面没有超时,基本上一直在加载加载加载。一旦我点击刷新 / CTRL-F5 一切都会恢复正常,我可以看到我的项目已被删除。

我的代码的一些摘录:

应用程序.js

angular.module('contacts', ['ngRoute', 'contacts.factory', 'contacts.filters', 'ui.bootstrap']).
  config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
    $routeProvider.
      when('/', {
        templateUrl: '/p/list',
        controller: ListCtrl,
      }).
      otherwise({
        redirectTo: '/'
      });
    $locationProvider.html5Mode(true);
  }]);

控制器.js

function ListCtrl($scope, $modal, contactFactory) {
 //code removed
  $scope.delete = function(c) {
    var id = c._id;
    var modalInstance = $modal.open({
      templateUrl: 'deleteContactModal',
      controller: deleteContactModalCtrl,
      resolve: {
        contact: function() {
          return contactFactory.getContact(id);
        }
      }
    });
  }
}

var deleteContactModalCtrl = function($scope, $route, $modalInstance, $window, contact, contactFactory) {
  $scope.name = contact.data.contact.name;

  $scope.deleteContact = function() {
    contactFactory.deleteContact(contact.data.contact._id).success(function() {
      //have also tried: $window.location.reload(true);
      //as well as window.location.href('/') - didn't work either
      $modalInstance.close($window.location.reload());
    });
  };
}

工厂.js

angular.module("contacts.factory", []).
  factory('contactFactory', function($http){
    return {
      //code removed
      deleteContact: function(id) {
        return $http.delete('/api/contact/' + id);
      }
    }
  });

后端 - app.js

//usual express setup
app.delete('/api/contact/:id', api.delete); //delete contact

后端 - api.js

//code removed
exports.delete = function (req, res) {
  var id = req.params.id;
  if (id) {
    ContactModel.findById(id, function (err, contact) {
      contact.remove(function (err) {
        if (!err) {
          res.json(true);
        } else {
          res.json(false)
          console.log(err);
        }
      });
    });
  }
};

目前我什至不确定这个问题是否与前端或后端有关。如前所述 - 后端部分工作正常 - 数据已从数据库中删除。

4

1 回答 1

4

好的,解决方案似乎如下:

$scope.deleteContact = function() {
    contactFactory.deleteContact(contact.data.contact._id).success(function() {
      $modalInstance.close();
      contactFactory.getContacts().success(function(contacts) {
        return $scope.contacts = contacts;
      });
      $window.location.reload();
    });
  };

在删除方法期间,我需要再次从我的工厂获取 getContacts() 方法。

于 2014-02-19T09:51:04.747 回答