在角度控制器中注册引导程序事件处理程序

nkn*_*knj 4 javascript jquery twitter-bootstrap angularjs

我是角度和javascript(有点)的新手,我想弄清楚如何在我的控制器中为一个bootstrap事件注册一个处理程序.

我想做这样的事情:

$('#mymodal').on('shown.bs.modal', function () {
   $scope.password = undefined;
});
Run Code Online (Sandbox Code Playgroud)

首先,我无法让jQuery在我的控制器中运行.根据我的研究,我感觉不推荐.这是真的?同样出于教育目的,如果我愿意,如何在我的控制器中运行jQuery?

其次,我写了以下内容作为jQuery的替代:

var modal = document.getElementById("mymodal");
modal.addEventListener('shown.bs.modal', function () {
  $scope.password = undefined;
}, false);
Run Code Online (Sandbox Code Playgroud)

这也行不通.我认为这'shown.bs.modal'还没有被"发现".有什么想法吗?

我需要requirebootstrap.js文件来修复此问题吗?

Tre*_*vor 9

看到这个plunker.

根据我的研究,我感觉不推荐.这是真的?同样出于教育目的,如果我愿意,如何在我的控制器中运行jQuery?

是的,通常不建议在角度应用程序中使用jQuery,也不是一般必需的.但是,如果你想使用它,你可以在包含角度库之前简单地包含它(链接到上面的plunker就是这样).在这种情况下,angular的jQuery版本(jqlite)在它的on()事件注册方法中不支持命名空间,所以如果你要使用bootstrap,你可能需要使用jQuery; 但是,你可以使用ui-bootstrap(bootstrap的角度版本)代替(见下文).

这也行不通.我认为'shown.bs.modal'尚未被"检测".有什么想法吗?

我是否需要使用bootstrap.js文件来修复此问题?

是的,你需要bootstrap.js.这是摘要的摘录:

标题包括:

<head>
  <script data-require="jquery@*" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
  <script data-require="bootstrap@*" data-semver="3.1.1" src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
  <script data-require="angular.js@*" data-semver="1.3.0-beta.5" src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script>
  <link data-require="bootstrap-css@3.1.1" data-semver="3.1.1" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
</head>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

<script>
  var app = angular.module('myapp', []);
  app.controller('mycontroller', function($scope, $timeout){
    $scope.test = 'Hello World!';
    $('#myModal').on('show.bs.modal', function (e) {
      $timeout(function(){
        $scope.test = 'Model has been opened!';  
      });
    })
  });
</script>
Run Code Online (Sandbox Code Playgroud)

但是,如果您只是想在每次打开时重置模态中的密码字段,这里使用ui-bootstrap这是一种更简单,更有棱角的方法.你可以在这里查看完整的plunker :

  var app = angular.module('myApp', ['ui.bootstrap']);
  app.controller('myController', function($scope, $modal){
    $scope.test = 'Hello World!';
    $scope.openPopup = function(){
      $modal.open({
        templateUrl: "popup.html",
        controller: "myModalController",
        resolve: {
          form: function() {
            return {
              username: 'default_username',
              password: 'default_password',
            }
          }
        }
      });
    }
  });
  app.controller('myModalController', function($scope, $modalInstance, form){
    $scope.form = form;
    $scope.close = function(){
      $modalInstance.dismiss('cancel');
    }
  });
Run Code Online (Sandbox Code Playgroud)