在Angular 1.5组件中,我展示了一个Material mdDialog,它本身有一个嵌入式组件:
$mdDialog.show({
controller: function($scope, $log) {
$scope.notify=function() {
$log.debug("need to cancel");
$mdDialog.hide();
}
},
template: "<md-dialog aria-label='Add Foobar'><new-foobar-panel on-cancel='notify()'></new-foobar-panel></md-dialog>",
targetEvent: ev,
clickOutsideToClose: true,
fullscreen: true
});
当嵌入式组件调用onCancel()
回调时,对话框的控制器会使用$mdDialog.hide()
关闭对话框。
但这似乎有些混乱。 $mdDialog
的文档说它将关闭最后打开的对话框,但这似乎有点懒惰和愚蠢。我确定有一些情况会导致许多组件和对话框失败。毕竟,我在对话框的控制器内部 - 不应该有对象实例的引用,我可以用来直接关闭它吗?
我试过了:
var dialog = $mdDialog.show({
controller: function($scope, $log) {
$scope.notify=function() {
$log.debug("need to cancel");
dialog.hide();
}
但那不起作用;或许会返回一个承诺而不是一个对话框。
所以我坚持打电话给$mdDialog.hide()
(全球服务!!)并希望这是指我正在使用的对话框? (这不是很好的模块化。)
答案 0 :(得分:0)
实际上documentation说
// Close the specified dialog instance and resolve with 'finished' flag // Normally this is not needed, just use '$mdDialog.hide()' to close // the most recent dialog popup. function closeAlert() { $mdDialog.hide( alert, "finished" ); alert = undefined; }
其中alert
是先前构建的对话框实例。因此,如果您确实需要引用特定的对话框实例而不是最后一个对话框,则可以使用上述方法将其关闭。