【问题标题】:Nodejs Angularjs Mongoose internet explorer 11 compatibilityNodejs Angularjs Mongoose Internet Explorer 11 兼容性
【发布时间】:2014-03-16 14:49:21
【问题描述】:

我正在开发和管理面板,使用 Angularjs 作为前端框架,Nodejs 在后端,Mongoose 用于 mongoDB 模型。

管理员角色可以删除所有用户,如下:

AdminPanel.html(在这个页面中,我显示的是网站管理员可以删除的用户列表)

<!-- Header -->
    <div ng:include="'/views/common/header.html'"></div>
<!-- End Header -->


<div data-ng-init='initial()'>
    <br>
    <br>

    <span style="float:right"><b>Bienvenue {{admin.local.nom }} !</b> </span>
    <br>
    <div style="float:right">
       <a href="/logout"> <i class="fa fa-unlock-alt"></i> Se déconnecter </a>
    </div>

    <br>
    <span class="label label-primary">{{listeProfils.length}}</span>
    <div class="row">
      <div class="col-md-4 text-center"> <span>Mes comptes  :</span>  <span class="label label-primary">{{comptes.length}}</span></div>
      <div class="col-md-4">
        <div class="input-group">
          <input type="text" class="form-control input-sm" ng-model="query">
          <span class="input-group-addon">
          <span class="glyphicon glyphicon-search"></span>
          </span>
        </div>
      </div>
      <div class="col-md-4 text-center">

      </div>
    </div>
    <br>
    <table class="table table-hover table-bordered table-condensed">
        <thead>
            <tr>
                <th ng-repeat="header in headers" class="centering">{{header}}</th>
            </tr>
        </thead>
        <tbody>

            <tr ng-repeat="compte in comptes | filter : query">
            <td>{{ compte.local.nom }}</td>
            <td>{{ compte.local.prenom }}</td>
            <td>{{ compte.local.email }}</td>
            <td style="width:150px; text-align:center"><button type="button" class="btn btn-danger btn-xs" data-toggle="modal" data-target="#myModal" ng-click="preSupprimer(compte)"><span class="glyphicon glyphicon-remove-circle"></span></button></td>   
            </tr>

        </tbody>
    </table>

</div>

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h4 class="modal-title" id="myModalLabel">Suppression</h4>
      </div>
      <div class="modal-body">
        Le compte sélectionné va être définitivement supprimé du système. Confirmez-vous cette suppression?
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
        <button type="button" class="btn btn-primary" ng-click="deleteAccount()" data-dismiss="modal">Confirmer suppression</button>
      </div>
    </div>
  </div>
</div>

<!-- Footer -->
    <div ng:include="'/views/common/footer.html'"></div>
<!-- End Footer -->
<div class="loader" ng-show="loader"></div>


when the admin clicks on the button to delete the user account from the database, a bootstrap Modal fires and tells the Administrator wether to confirm deletion or not.

当点击确认时,从定义如下的 adminPanel 控制器触发 deleteAccount() 方法:

AdminPanel.js:

  'use strict';
angular.module('App').controller('AdminPanelCtrl', function($scope, $http, $location, configuration) {
    $scope.headers = ['Nom', 'Prenom', 'Email', 'Action'];
    $scope.loader = false;

    $scope.listAccounts = function() {
        $http.get(configuration.URL_REQUEST + '/allAccounts')
            .success(function(data) {
                $scope.comptes = data;

            });
    };

    $scope.initial = function() {
        $http.get(configuration.URL_REQUEST + '/adminService').success(function(data, status) {
            $scope.admin = data;
        }).error(function() {
            $location.path('/logout');
        });

        $scope.listAccounts();

    };

    $scope.deleteAccount = function() {
        $scope.loader = true;
        $http.post(configuration.URL_REQUEST + '/deleteAccounts', $scope.compteAsupprimer)
            .success(function(data) {
                console.log('deleted' + data);
                $scope.listAccounts();
                $scope.loader = false;

            });
    };

    $scope.preSupprimer = function(account) {
        $scope.compteAsupprimer = account;
    }
});

我的 dao 文件如下:

  /* Delete userAccounts */

exports.supprimer = function(req, res) {

  var userAccount = new UserAccount(req.body);
  UserAccount.findById(userAccount._id, function(err, item) {
    if (err) {
      res.send({
        'result': 'error'
      });
    } else {
      UserAccount.remove(item, function() {
        res.send({
          'result': 'error'
        });
      });
    }
  });
};

并通过路由进入 routes.js

因此,当我单击 IE11 上的删除帐户按钮时,问题就开始了,该帐户已从 mongoDB 数据库中删除,但显示在网格中。当我刷新页面时,该帐户仍在网格中。但是当我关闭 IE11 并从头开始重新打开 url 时,它不会显示并给我想要的结果。

所以我的问题是:如何在不让用户关闭浏览器并重新打开它、删除后直接刷新帐户列表的情况下执行此操作。 Firefox , Chrome 和 safari 都支持这个功能,.send() 函数有问题吗,我已经尝试过 json() 和 jsonp() ..

有什么意见吗?

【问题讨论】:

  • 您是否要从适当的范围/列表中删除帐户,以便正确更新 UI?
  • @WiredPrairie 我点击了删除按钮,该按钮正在触发 compteAsupprimer() 方法,该方法将当前帐户存储到 compteAsupprimer 变量中,确认删除后,调用 deleteAccount function() 并通过 http 发送将 $scope.compteAsupprimer 发布到执行 findByID 并从数据库中删除帐户的 DAO 方法 supprimer(req,res)。成功后, $scope.listAccounts() 被召回以列出数据库中的所有帐户。这适用于 Chrome、firefox 和 safari
  • 您是否尝试在应用程序中放置任何断点以查看列表是否在您期望的时候被返回等?
  • @WiredPrairie 我是否必须对范围进行一些操作才能正确更新?
  • @WiredPrairie 我不知道如何设置断点

标签: javascript node.js angularjs internet-explorer


【解决方案1】:

这听起来像是 jquery 或 ajax 缓存问题。如果您使用的是 jquery,则可以在项目开始时使用此代码打开缓存破坏代码:

$.ajaxSetup({ cache: false });

我不知道 Angular 的相应设置是什么,但我知道过去在 IE 缓存 ajax 请求时遇到过问题。

【解决方案2】:

我已经像这样解决了 Angularjs 的问题:

myModule.config(['$httpProvider', function($httpProvider) {
    //initialize get if not there
    if (!$httpProvider.defaults.headers.get) {
        $httpProvider.defaults.headers.get = {};    
    }
    //disable IE ajax request caching
    $httpProvider.defaults.headers.get['If-Modified-Since'] = '0';
}]);

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多