如何在角度ui路由器上转换到另一个模态后关闭模态

时间:2015-09-18 03:12:54

标签: javascript angularjs modal-dialog angular-ui-router angular-ui

我正在使用angular ui router打开模态。

我有两种状态:

  1. int doubled_size = get_doubled_size(....);
  2. 'modal.first'
  3. 我想要的是通过点击按钮关闭第一个模态并将状态更改为'modal.second'

    问题是我只能关闭模态更改状态(但第一个模态仍然打开)。

    这里是州定义:

    'modal.second'

    第二个模态定义完全相同(州名$stateProvider .state('modal.first', { url: '/first', onEnter: function ($state, $modal) { $modal.open({ templateUrl: 'some_url', controller: 'FirstCtrl', resolve: { //... } } }).result.finally(function () { $state.go('^'); }); } }) 和网址modal.second)。

    我正试图关闭模态(并改变状态),如下所示:

    /second

    FirstController

    但是这没用。我只能选择一个 - 或$scope.goSecond = function () { $state.go('modal.second', $stateParams); $modalInstance.close(); }; $state.go(...)

    我想也许我应该更加关注$modalInstance.close()块。但仍然没有想法。感谢。

    使用模式链接到官方常见问题解答:click

    UPDATE 我不能在没有任何语句的情况下最终更改状态,因为我只需要通过单击按钮来更改状态(并在任何其他情况下使.finally()更新)。 / p>

1 个答案:

答案 0 :(得分:3)

您可以定义包含modalInstance的服务,如果再次打开则关闭它。

angular.module('someModule')
  .service("singleModal", function($modal) {
    this.modalInstance = null;
    this.open = function(options) {
      if (this.modalInstance) {
        this.modalInstance.close();
      }

      this.modalInstance = $modal.open(options);
      return this.modalInstance;
    };
  })

您可以看到简单的服务示例(没有ui bootstrap)here