1

我已经被困了一段时间,我真的不知道还能做什么。基本上我有一个程序需要在SocketIO“房间”中只有一个人时创建一个Angular UI Modal,一旦另一个人进入那个房间,Modal就需要关闭。SocketIO 事件 (modalStart) 和 (modalEnd) 是正确的,但我不确定如何关闭第一个模式。任何帮助将不胜感激。

angular.module('CoderCombatApp.controllers', [])
  .controller('mainCntrl', ['$scope', 'socket', '$modal', function ($scope, socket, $modal) {
    socket.on('join', function (room) {
        socket.emit('init', room);
    });
    socket.on('modalStart', function(){
      $modal({
        template: '../../views/pairing-modal.html',
        show: true,
        keyboard: false,
        scope: $scope
      });
    });
    socket.on('modalEnd', function(){
      //END THAT MODAL ABOVE
    })
}]);

太感谢了!

*另外一件事,当Modal进入浏览器时,它基本上是冻结浏览器。Modal 中的 GIF 不旋转,我无法在 chrome 中打开开发工具。这可能是它实际上并没有关闭的原因......

*另一个更新。看起来我的 SocketIO 加入事件被触发了两次,最终导致模态冻结。不知道为什么它被触发两次。

4

1 回答 1

1

存储对模式的引用,以便稍后关闭它。就像是:

angular.module('CoderCombatApp.controllers', [])
  .controller('mainCntrl', ['$scope', 'socket', '$modal', function ($scope, socket, $modal) {
    var modalInstance;
    socket.on('join', function (room) {
        socket.emit('init', room);
    });
    socket.on('modalStart', function(){
      modalInstance = $modal.open({
        template: '../../views/pairing-modal.html',
        keyboard: false,
        scope: $scope
      });
    });
    socket.on('modalEnd', function(){
      modalInstance.close();
    })
}]);

调用$modal.open()以获取模态实例。你不需要这个show: true选项。

根据http://angular-ui.github.io/bootstrap/的文档,还有另一个选项可以“结束上面的模式”:

$scope.$close();

$close方法被添加到模态的范围内。

于 2013-09-15T02:21:29.290 回答