$ mdDialog堆叠/嵌套对话框,有可能吗?

And*_*rey 27 angularjs angular-material

我想在另一个$mdDialog上面打开一个.如果可能,请使用无限重叠对话框.

有任何想法吗?

Dor*_*val 21

Gabriel Anzaldo Alvarado在我看来给出了正确的答案,正确的答案在Plunker链接中分享.但是,正如许多用户所要求的那样,我正在添加实际代码以防将来链接变得不可用.

基本上,在使用该.show({})功能打开对话框时,添加选项skipHide: true.

HTML

<body>
 <div ng-controller="AppCtrl as ctrl" 
    ng-cloak="" 
    class="virtualRepeatdemoVerticalUsage" 
    ng-app="MyApp">
  <md-content layout="column">
    <md-button ng-click="ctrl.moreInfo(1)">
       Open Dialog
    </md-button>
  </md-content>
 </div>
</body>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

(function () {
  'use strict';

  angular
  .module('MyApp', ['ngMaterial'])

  .controller('AppCtrl', function ($interval, $mdDialog) {
    var vm = this;

    vm.moreInfo = function moreInfo(thing) {
      $mdDialog.show({
        controllerAs : 'dialogCtrl',
        clickOutsideToClose : true,
        bindToController : true,
        controller : function ($mdDialog) {
          this.click = function click() {
            $mdDialog.show({
              controllerAs : 'dialogCtrl',
              controller : function ($mdDialog) {
                this.click = function () {
                  $mdDialog.hide();
                }
              },
              preserveScope : true,
              autoWrap : true,
              skipHide : true,
              template : '<md-dialog class="confirm"><md-content><md-button ng-click="dialogCtrl.click()">I am in a 2nd dialog!</md-button></md-content></md-dialog>'
            })
          }
        },
        autoWrap : false,
        template : '<md-dialog class="stickyDialog" data-type="{{::dialogCtrl.thing.title}}"><md-content><md-button ng-click="dialogCtrl.click()">I am in a dialog!</md-button></md-content></md-dialog>',
        locals : {
          thing : thing
        }
      })
    }
  });
})();
Run Code Online (Sandbox Code Playgroud)

上面的代码对我有用.

正如Vincenzo在另一个答案中所指出的,在堆叠mdDialogs时,下面的对话框不会灰显,有一个CSS技巧可以解决这个问题:https://stackoverflow.com/a/38013682/366662

UPDATE

这个答案适用于1.1.1版本,从1.1.2版本的材质队更改的属性skipHidemultiple.因此,在复制粘贴代码段时要小心.检查您的材料版本并相应地使用正确的属性.

  • 感谢您注意更改属性名称 (6认同)

小智 19

更新:根据@Magnus,它已更新multiple为v1.1.2


添加skipHide: true到第二个对话框的选项对象.

这对我有用:http://webiks.com/mddialog-with-a-confirmation-dialog/

  • 请不要从v1.1.2更改属性名称.请参阅下面@Dorival的回答.属性名称现在是`multiple`,而不是`skipHide`. (5认同)

Sal*_*lam 18

不,现在不可能拥有多个$mdDialog.老实说,我真的需要这个功能并试图让它工作但到目前为止没有成功.让我们希望他们在将来的版本中允许这个功能.
虽然讨论在这里,你可以找到一些有用的存在.

注意:这不再是正确的答案,而不是答案的时间段,请查看下面的更多答案.

  • 这是一个可行的例子:http://plnkr.co/edit/Ga027OYU5nrkua3JxNRy?p=preview (8认同)
  • 您应该考虑更新此答案,因为它不再准确.错误的答案被标记为正确是对社区的不利服务. (4认同)
  • @GabrielAnzaldoAlvarado很棒的解决方案,你让我的一天:).我注意到有`skipHide`参数,我们可以设置`true`来防止自动隐藏. (2认同)

gab*_*ldo 6

嗨,大家好,这是一个有嵌套对话框的解决方法:https://github.com/angular/material/issues/698

这个想法是当第二个打开时保存第一个状态,当第二个关闭时再次启动第一个对话框.

  • @RyanKimber这是一个示例实现:http://plnkr.co/edit/Ga027OYU5nrkua3JxNRy?p = preview (2认同)

Vin*_*nzo 6

正如加布里埃尔·安扎尔多·阿尔瓦拉多在评论中所写的那样,你可以在这个普通人身上看到:http ://plnkr.co/edit/Ga027OYU5nrkua3JxNRy?p=preview

此外,您可以添加一些CSS类来获得相同的背景灰色覆盖:https: //github.com/angular/material/issues/7262

._md-dialog-backdrop:nth-of-type(even) {
    z-index: 81;
}

._md-dialog-backdrop:nth-of-type(odd) {
    z-index: 79;
}

.md-dialog-container:nth-of-type(even) {
    z-index: 80;
}

.md-dialog-container:nth-of-type(odd) {
    z-index: 82;
}
Run Code Online (Sandbox Code Playgroud)

更新:

从Angular Material v1.1.2中,选项skipHide已被多个替换.


小智 5

skiphide已被弃用。改用多个键。请参阅此处的文档

这是一个代码片段

myCtrl.demoClick = function moreInfo(thing) {
        $mdDialog.show({
            controllerAs: 'dialogCtrl',
            clickOutsideToClose: true,
            bindToController: true,
            controller: function ($mdDialog) {
                this.click = function click() {
                    $mdDialog.show({
                        preserveScope: true,
                        multiple: true,
                        controllerAs: 'dialogCtrl',
                        controller: function ($mdDialog) {
                            this.click = function () {
                                $mdDialog.hide();
                            }
                        },
                        template: '<md-dialog class="confirm"><md-content>I am in a 2nd dialog!<md-button class="md-raised" ng-click="dialogCtrl.click()">Confirm!</md-button></md-content></md-dialog>'
                    })
                }
            },
            autoWrap: false,
            template: '<md-dialog class="stickyDialog" data-type="{{::dialogCtrl.thing.title}}"><md-content>I am in a dialog!<md-button class="md-raised" ng-click="dialogCtrl.click()">Click me to do something</md-button></md-content></md-dialog>',
            locals: {
                thing: thing
            }
        })}
Run Code Online (Sandbox Code Playgroud)