我在回答“this plnkr”这个问题时创建了AngularJS - open controller in a dialog (template loaded dynamically)。
所有示例应用程序都会基于模板启动一个对话框,并带有自己的控制器。对话框第一次启动时,一切都按预期工作。但是,如果我尝试重新启动对话框,在解除它后,会显示模态背景但没有对话框。在javascript控制台中,您可以看到then
返回的承诺上的$dialog.open()
方法会立即被调用,但不会删除背景,也不会报告错误。我完全不知所措。
可以在angular-ui bootstrap documentation page上重复打开和关闭对话框。
我哪里出错了?
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"); });
};
}]);
答案 0 :(得分:7)
我发现了这个问题。它与使用<a>
标记打开对话框有关。单击<a>
标记会导致触发位置更改。该对话框通过关闭来处理位置更改,如下所示。
this.handleLocationChange = function() {
self.close();
};
我不确定为什么第一次点击<a>
代码时不会发生这种情况,但肯定会在所有后续调用中发生。
您可以在此plunker中看到,如果您使用按钮,则每次都会正确打开。
希望这有帮助!我会试着弄清楚它为什么不会在第一时间破坏。
修改强>
位置变化实际上非常糟糕。它似乎是循环的,我认为是10个消化的最大角度。仍然不确定为什么它不会在第一次点击时进行位置更改。
答案 1 :(得分:0)
看起来如果你把“javascript:;”在href中,它适用于&lt; a&gt;标签
像这样:
<a href="javascript:;" ng-click="launch()">Open the dialog</a>
此外,&lt; a&gt;标签问题似乎与浏览器有关。
答案 2 :(得分:0)
标签确实存在问题。 Jason提到他预计角度指令会阻止位置变化。就是这样,但它需要href为空白。那个掠夺者是
<a href="javascript:;" ng-click="launch()">Open the dialog</a>
应该是
<a href="" ng-click="launch()">Open the dialog</a>
当我改变了那个效果时,一切似乎都没问题