3

溢出!

我是第一次构建 Angular Material 站点,但我似乎遇到了对话框功能的问题。除了在移动设备上,我可以让盒子正常显示和关闭。即,当用户按下手机上的“清除”或“返回按钮”时。当您执行此操作(或单击浏览器上的后退按钮)时,它不会影响对话框。它仍在视图中并等待输入。按 ESC 键将其关闭。任何打电话的人都会本能地认为他们可以摆脱它,在我看来他们应该这样做。我已经尝试了各种各样的方法,这些方法要么不起作用,我只是没有正确实施它们。所以,来了..

控制器:

'use strict'; 
app.controller('NavCtrl', function ($scope, $mdDialog) {    
$scope.itworked = "Angular Successful";
var dialogContent = ' \
    <md-content> \
      <div class="diagtest">Content</div> \
        <p class="awesome"><a href="#/" ng-click="hide()">This link works</a></p> \
        <p><a href="#/portfolio" ng-click="hide()">This link also works</a></p> \
        <p>filler</p> \
    </md-content> \
';
var noForm = '<md-dialog id="navDialog">' + dialogContent + '</md-dialog>';
var formAround = '<form ng-submit="hide()"><md-dialog>' + dialogContent + '</md-dialog></form>';
var formInside = '<md-dialog><form ng-submit="hide()">' + dialogContent + '</form></md-dialog>';

function makeDialog(tmpl) {
    return function(ev) {
        $mdDialog.show({
            template: tmpl,
            targetEvent: ev,
            controller: 'DialogController'
        });
    };
}
$scope.dialogNoForm = makeDialog(noForm);
$scope.dialogFormAround = makeDialog(formAround); \\ This is for future use
$scope.dialogFormInside = makeDialog(formInside); \\ so is this...
});
app.controller('DialogController', function($scope, $mdDialog) {
$scope.hide = function() {
    $mdDialog.hide($scope.participant);
};
$scope.cancel = function() {
    $mdDialog.cancel();
};
});

任何人都可以建议我愿意尝试。

我尝试了以下方法:

setCancellable(true)

如果按下后退按钮,还尝试使用“导航”技巧关闭对话框,但它不起作用。

您可以在官方文档网站上看到一个具有相同功能的示例。如果您检查对话框,您可以看到它们的功能完全相同。

https://material.angularjs.org/#/demo/material.components.dialog

它们的写法有点不同,但它们在台式机和手机上的行为和我的一样。

提前感谢任何可以阐明的人!我很感激!

4

3 回答 3

7

我知道这是答案来晚了。

我有同样的问题,并且能够通过利用路由事件来解决它。当路由改变时,关闭 mdDialog

示例代码。app启动应用程序时是否注册了您的 Angular 应用程序代码

function appRun($rootScope, $mdDialog) {

    $rootScope.$on('$stateChangeSuccess',
        function (event, toState, toParams, fromState) {

            //close any open dialogs
            $mdDialog.cancel();
        });

}

app.run(['$rootScope', '$mdDialog', appRun]);

干杯

于 2016-01-17T22:45:29.447 回答
1

根据我的经验,您必须使用 History API 来实现您的目标。因此,当您打开对话框时,您应该将新状态推送到历史堆栈。因此,当用户回击时,您可以捕获“popstate”事件并从那里隐藏/关闭它。

您还应该注意,当对话框以一种设计的方式关闭时(例如单击背景),您应该手动弹出所有已推送到历史堆栈的状态。

于 2015-03-14T16:34:10.910 回答
0

将此行添加到您的app.run(..)
$locationProvider.html5Mode(true)

于 2015-06-11T12:50:13.647 回答