AngularStrap关闭模态与控制器

时间:2014-02-07 19:23:00

标签: angularjs twitter-bootstrap modal-dialog angular-strap

我正在使用AngularStrap和bootstrap。

我有一个使用它自己的控制器的模态对话框。如何使用本地控制器关闭模态?

我在这样的按钮上实例化控制器:

<button type="button" 
  class="btn btn-success btn-lg" 
  bs-modal="modal" 
  data-template="user-login-modal.html"
  data-container="body"
  ng-controller="userLoginController"
  >Click here to log in</button>

并且userLoginController具有:

$scope.authenticate = function(){
    this.hide(); // this doesn't work
    }

这显然只是一个演示,我希望它在成功登录后关闭,但这是我用来关闭它的代码。

我已尝试以编程方式实例化模态(使用$ modal服务创建模态)但我无法弄清楚如何通过该方法注入控制器。

如果我要使用bs-modal指令从模态中发出事件,我该如何引用模态来关闭它?

这是我的plnkr: http://plnkr.co/edit/m5gT1HiOl1X9poicWIEi?p=preview

6 个答案:

答案 0 :(得分:8)

在点击功能中执行

$scope.myClickEvent = function () {
   this.$hide();
}

答案 1 :(得分:7)

想出一个好方法:

我将ng-controller移动到TEMPLATE并使用提供的模态服务实例化模态。然后,我使用一个广泛的基础广播,让每个人都知道有人成功登录。

新控制器代码:

var loginModal = $modal({template:'/template.html', show:false});

$scope.showLogin = function(){
    loginModal.$promise.then(loginModal.show);
}

$scope.$on("login", function(){
    loginModal.$promise.then(loginModal.hide);
});

按钮现在看起来像这样:

<button type="button" 
  class="btn btn-success btn-lg" 
  ng-click="showLogin()"
  >Click here to log in</button>

我的模板在第一个标签中有旧的ng-controller。

答案 2 :(得分:5)

我可能为时已晚,但只想分享我的答案。如果你只需要在表单成功后隐藏模态,那么将$ hide函数绑定到控制器varriable之一。

<div class="modal" data-ng-controller="Controller" data-ng-init="bindHideModalFunction($hide)">

在控制器中:

// Bind the hiding modal function to controller and call it when form is success
$scope.hideModal;
$scope.bindHideModalFunction =function(hideModalFunction){
    $scope.hideModal = hideModalFunction;
}

答案 3 :(得分:0)

我发现上述所有答案对于您的用例来说太复杂了(当我遇到这个问题时我的答案)。

您需要做的就是链接ng-click以使用内置的$hide()角度绑带捆绑功能。

所以你的ng-click看起来像是:ng-click="authenticate();$hide()"

答案 4 :(得分:0)

如果要将数据提交给控制器,则使用Angular和bootstrap然后将模态关闭只需将onclick="$('.modal').modal('hide')"行添加到提交按钮即可。这样它就会击中控制器并关闭模态。如果您在按钮提交中使用data-dismiss="modal",则永远不会点击控制器。至少对我而言,它没有。这并不是说我的方法是一种最佳实践,而是一种快速的方法来获取数据至少提交并关闭模态。

<div class="modal fade" id="myModal" ng-controller="SubmitCtrl">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-body">
        <form ng-submit="submit()">
          <input type="text" ng-model="name" />
          <button type="submit" onclick="$('.modal').modal('hide')">Submit</button>
        </form>
      </div>
    </div>
  </div>
</div>

答案 5 :(得分:0)

也许可以点击服务打开它并让它自己关闭$destroy事件?

$scope.openModal = function()
{
    $scope.modal = $modal({
        template: "user-login-modal.html",
        container="body"
    });
}

$scope.$on("$destroy", function()
{
    if ($scope.modal)
    {
        $scope.modal.hide();
    }
});