我回答这个问题’
AngularJS – open controller in a dialog (template loaded dynamically)‘时创建了
this plnkr.
所有示例应用程序都会基于模板启动一个对话框,并带有自己的控制器.对话框第一次启动时,一切都按预期工作.但是,如果我尝试重新启动对话框,在解除它后,会显示模态背景但没有对话框.在javascript控制台中,您可以看到$dialog.open()返回的promise上的then方法被立即调用,但不删除背景,也不会报告错误.我完全不知所措.
可以在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"); }); }; }]);
解决方法
我发现了这个问题.它与使用< a>有关.标记以打开对话框.点击< a> tag会导致触发位置更改.该对话框通过关闭自身来处理位置更改,如下所示.
this.handleLocationChange = function() { self.close(); };
我不确定为什么在首次点击< a>时不会发生这种情况.标签,但它肯定发生在所有后续调用.
您可以在此plunker中看到,如果您使用按钮,则每次都会正确打开.
希望这可以帮助!我会试着弄清楚它为什么不会在第一时间破坏.
编辑
位置变化实际上非常糟糕.它似乎是循环的,我认为是10个消化的最大角度.仍然不确定为什么它不会在第一次点击时进行位置更改.