2013-06-05 132 views
4

我在创建this plnkr时回答了此问题'AngularJS - open controller in a dialog (template loaded dynamically)'。

所有示例应用程序都是基于模板启动一个对话框,并使用它自己的控制器。对话框首次启动时,所有内容都按预期工作。但是,如果尝试重新启动对话框,解除对话框后,将显示模式背景,但不显示对话框。在javascript控制台中,您可以看到立即调用$dialog.open()返回的承诺上的then方法,但不会删除背景,也不会报告错误。我完全困惑。

可以在angular-ui引导程序documentation page上反复打开和关闭对话框。

我哪里错了?

HTML:

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

    <head> 
    <link data-require="[email protected]*" data-semver="2.3.2" rel="stylesheet" href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" /> 
    <script data-require="[email protected]" data-semver="1.0.7" src="http://code.angularjs.org/1.0.7/angular.min.js"></script> 
    <script data-require="[email protected]" 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"); }); 
    }; 
}]); 
+0

我叉你plunker和更新,但没能解决问题。 http://plnkr.co/edit/E6KCrZZflP8zap3F180H似乎一旦_open在第一次打开后被设置为false,它从不会被重置为打开 –

+0

,希望有人能够让我们知道发生了什么。我同意某些事情没有正确设定,但肯定不是很明显。 – Jason

回答

7

我已经找到了问题。它与使用<a>标签打开对话​​框有关。点击<a>标签会导致位置更改被触发。该对话框通过关闭自身来处理位置更改,如下所示。

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

我不知道为什么,这不会对<a>标签的第一次点击发生,但它在所有后续调用肯定会发生。

您可以在此plunker中看到,如果您使用按钮,则每次都会正确打开。

希望这会有所帮助!我会试图弄清楚为什么它不会在第一次中断。

编辑

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

+0

好的结果 - 你在下一个小时就把这个麻烦保存下来了。 – rGil

+0

非常奇怪,由于某种原因,我认为ng-click阻止了锚点发起位置更改事件。如何在这里使用锚点来触发ng-click break,但在其他场景中不能使用?因为我们正在使用路线? – Jason

+0

我对ng-click的想法也一样。就像我在编辑中所说的那样,它并没有多次触发locationStateChange。可能会更深一些,但我还没有进一步调查 –

0

它看起来像是你把“javascript :;”在href中,那么它对<a>标记正常工作。

像这样:

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

此外,<一个>标签的问题似乎是浏览器有关。

0

麻烦确实与标签有关。 Jason提到他期望角度指令可以阻止位置变化。这是如此,但它需要空白的href。在plunker是

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

,应该已经

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

当我改变了plunker到影响一切似乎还好