4

我在回答这个问题“ AngularJS - 在对话框中打开控制器(动态加载模板) ”时创建了这个 plnkr

示例应用程序所做的只是启动一个基于模板的对话框,并带有它自己的控制器。对话框第一次启动时,一切都按预期工作。但是,如果我尝试重新启动对话框,在将其关闭后,会显示模态背景但没有对话框。在 javascript 控制台中,您可以看到then返回的 promise 上的方法$dialog.open()被立即调用,但背景没有被移除,也没有报告错误。我完全感到困惑。

该对话框可以在 angular-ui bootstrap文档页面上反复打开和关闭。

我哪里做错了?

HTML:

<!DOCTYPE html>
<html ng-app="plnkr">

  <head>
    <link data-require="bootstrap-css@*" data-semver="2.3.2" rel="stylesheet" href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" />
    <script data-require="angular.js@1.0.7" data-semver="1.0.7" src="http://code.angularjs.org/1.0.7/angular.min.js"></script>
    <script data-require="ui-bootstrap@0.3.0" data-semver="0.3.0" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.3.0.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body>
    <div ng-view></div>
  </body>

</html>

JS:

app.controller("DemoCtl", ["$scope", "$dialog", function($scope, $dialog){
  $scope.launch = function() {
    var d = $dialog.dialog({
      backdrop: true,
      keyboard: true,
      backdropClick: true,
      templateUrl: "dialog.html",
      controller: "DialogCtl"
    });

    d.open().then(function(result) { console.log("d.open().then"); });
  };
}]);
4

3 回答 3

7

我发现了这个问题。它与使用<a>标签打开对话​​框有关。单击<a>标签会触发位置更改。该对话框通过关闭自身来处理位置更改,如下所示。

  this.handleLocationChange = function() {
    self.close();
  };

我不确定为什么在第一次点击<a>标签时不会发生这种情况,但它肯定会在所有后续调用中发生。

你可以在这个plunker中看到,如果你使用一个按钮,它每次都会正确打开。

希望这可以帮助!我会试着弄清楚为什么它不会在第一次打破。

编辑

位置变化实际上非常糟糕。它似乎是循环的,我认为是 10 个摘要的最大角度。仍然不确定为什么它不会在第一次点击时更改位置。

于 2013-06-05T16:35:38.263 回答
0

看起来如果你把“javascript:;” 在 href 中,那么它适用于 <a> 标签。

像这样:

<a href="javascript:;" ng-click="launch()">Open the dialog</a>

此外, <a> 标签问题似乎与浏览器相关。

于 2013-09-04T06:33:08.573 回答
0

问题确实出在标签上。Jason 提到他希望 angular 指令会停止位置更改。是这样,但它需要 href 为空白。笨蛋是

<a href="javascript:;" ng-click="launch()">Open the dialog</a>

并且应该是

<a href="" ng-click="launch()">Open the dialog</a>

当我把 plunker 改成那种效果时,一切似乎都还好

于 2014-09-19T13:44:52.533 回答