从控制器关闭Angular 1.5 Material mdDialog

时间:2016-12-08 19:21:26

标签: angularjs angular-material

在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()(全球服务!!)并希望这是指我正在使用的对话框? (这不是很好的模块化。)

1 个答案:

答案 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是先前构建的对话框实例。因此,如果您确实需要引用特定的对话框实例而不是最后一个对话框,则可以使用上述方法将其关闭。