0

我一直在尝试使用应用级控制器来显示模式对话框。本地功能控制器的测试工作完美,但是应用程序级别控制器显示灰色阴影而不是所需的对话框。

编辑和删除的结果(在本例中)应该表现相同,但事实并非如此。

Plunker 链接

提前致谢。

索引.HTML

 <!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>Sandbox Angular</title>
    <!-- Bootstrap Core CSS -->
    <link rel="stylesheet" href="assets/css/bootstrap.min.css">
    <!-- Content CSS -->
    <link rel="stylesheet" href="Content/angular-material.css">
    <link rel="stylesheet" href="Content/ui-grid.css">
</head>
<!--<body ng-app="mainApp">-->
<body>
    <div class="container">
        <div ng-controller="HeaderGridCtrl">
            <div class="grid" ui-grid="gridOptions" ui-grid-edit ui-grid-resize-columns></div>
        </div>
    </div>
        <!-- /.container -->
    <script src="Scripts/angular.js"></script>
    <script src="Scripts/angular-material/angular-material.js"></script>
    <script src="Scripts/angular-animate/angular-animate.js"></script>
    <script src="Scripts/angular-aria/angular-aria.js"></script>
    <script src="Scripts/ui-grid.js"></script>
    <script src="app/app.module.js"></script>
</body>
</html>

测试编辑.HTML

<md-dialog>
<div>
    <form ng-cloak>
        <md-toolbar>
            <div class="md-toolbar-tools">
                <h2>{{firstName}} {{lastName}} ({{action}})</h2>
                <span flex></span>
            </div>
        </md-toolbar>
        <md-dialog-content>
            <div class="md-dialog-content">
                <p>
                    Life's actions....make sure the juice is worth the squeeze.
                </p>
            </div>
        </md-dialog-content>

    </form>
</div>

测试删除.HTML

<md-dialog>
<div ng-controller="DetailRecordCtrl">
    <form ng-cloak>
        <md-toolbar>
            <div class="md-toolbar-tools">
                <h2>{{firstName}} {{lastName}} ({{action}})</h2>
                <span flex></span>
            </div>
        </md-toolbar>
        <md-dialog-content>
            <div class="md-dialog-content">
                <h2>{{firstName}} {{lastName}} ({{action}})</h2>
                <p>
                    Life's actions....make sure the juice is worth the squeeze.
                </p>
            </div>
        </md-dialog-content>
    </form>
</div>

app.module.js

(function () {
'use strict';
//,'ui.router''ngGrid'
var app = angular.module('app', ['ngMaterial', 'ui.grid', 'ui.grid.resizeColumns']);

app.controller('DetailRecordCtrl', ['$scope', '$mdDialog', 'action', 'currentRow', initDetail])
app.controller('HeaderGridCtrl', ['$scope', '$mdDialog', initGrid]);
app.controller('testDialogCtrl', ['$scope', '$mdDialog', initModalTest]);

//---------------------------------
app.run([function () {
    /* Run is when the app gets kicked off*/
    console.log("Run processed");
}])

//---------------------------------
function initDetail($scope, $mdDialog, action, currentRow) {
    $scope = $scope;
    $scope.action = action;
    $scope.firstName = currentRow.entity.firstName;
    $scope.lastName = currentRow.entity.lastName;
    $scope.closeDialog = function () {
        $mdDialog.hide();
    };
}

//---------------------------------
function initGrid($scope, $mdDialog) {
    var currentRow = 0;

    $scope.showDelete = function (ev, keyAction, row) {
        $mdDialog.show({
            locals: { action: keyAction, currentRow: row },
            controller: 'DetailRecordCtrl',
            scope: $scope,
            preserveScope: true,
            targetEvent: ev,
            clickOutsideToClose: true,
            skipHide: true,
            fullscreen: $scope.customFullscreen // Only for -xs, -sm breakpoints.
        })
    };

    $scope.showEdit = function (ev, keyAction, row) {
        $mdDialog.show({
            locals: { action: keyAction, currentRow: row },
            controller: LocalDetailRecordCtrl,
            templateUrl: 'testEdit.html',

            scope: $scope,
            preserveScope: true,
            ariaLabel: 'Edit Record',
            targetEvent: ev,
            clickOutsideToClose: true,
            fullscreen: $scope.customFullscreen // Only for -xs, -sm breakpoints.
        })

    };

    $scope.editIcon = '<button class="md-primary md-raised" ng-click="grid.appScope.showEdit($event,\'EDIT\',row)">EDIT</button> ';
    $scope.deleteIcon = '<button class="md-primary md-raised" ng-click="grid.appScope.showDelete($event,\'DELETE\',row)">DELETE</button>';
    $scope.info = [{ firstName: "Jimmy", lastName: "John", grade: '1st', contributionDay01: 5.12, total: 0 },
                    { firstName: "Jane", lastName: "Pauley", grade: '2nd', contributionDay01: 4, total: 0 },
                    { firstName: "Andrea", lastName: "Kragel", grade: '3rd', contributionDay01: 11.28, total: 0 },
                    { firstName: "Zebra", lastName: "Zoo", grade: 'PK', contributionDay01: 19.23, total: 0 },
                    { firstName: "Jaguar", lastName: "Meowser", grade: 'K', contributionDay01: 25, total: 0 }];
    $scope.gridOptions = {
        data: 'info',
        enableFiltering: true,
        enableColumnResizing: true,
        enableSorting: false,

        enableRowHeaderSelection: true,
        enableColumnMenus: true,
        enableCellEditOnFocus: true,
        enableRowSelection: true,
        enableCellEdit: true,
        noUnselect: false,
        cellTemplate: '<div ng-repeat="col in renderedColumns"></div>',

        columnDefs: [
            {
                field: 'wrkDisplay', displayName: 'Actions', enableCellEdit: false, width: '*'
                , cellTemplate:
                    '<div class="testClass">' + $scope.editIcon + ' ' + $scope.deleteIcon + ' ' +
                    '</div>'
            },
            { field: 'firstName', displayName: 'First Name', enableCellEdit: true, minWidth: 100, },
            { field: 'lastName', displayName: 'Last Name', enableCellEdit: true, minWidth: 100 },
            { field: 'grade', displayName: 'Grade', enableCellEdit: true, minWidth: 70 },
            { field: 'getFullName()', displayName: 'Teacher', enableCellEdit: true, minWidth: 100 },
            { field: 'contributionDay01', displayName: 'Day1', enableCellEdit: true, minWidth: 50, cellFilter: 'number: 2' },
            { field: 'getTotal()', displayName: 'Total', enableCellEdit: false, cellFilter: 'currency' }]
    };

    //Calaculated fields
    angular.forEach($scope.info, function (row) {
        row.getTotal = function () {
            return this.contributionDay01 * 11;
        }
        row.getFullName = function () {
            return (this.firstName + ' ' + this.lastName);
        }

    });

    function LocalDetailRecordCtrl($scope, $mdDialog, action, currentRow) {
        $scope.action = action;
        $scope.firstName = currentRow.entity.firstName;
        $scope.lastName = currentRow.entity.lastName;
        $scope.closeDialog = function () {
            $mdDialog.hide();
        }
    };

}
})();
4

1 回答 1

0

第n 次查看Angular $mdDialog 文档后问题已解决。

$mdDialog.show 方法下列出的控制器可以用引号或不带引号来声明。

  • 没有引号使用定义的本地 $scope 函数。
  • 带引号使用应用级控制器 [ie app.controller(...)] 此外,还可以使用模板/templateUrl。

现在,这使我能够拥有一个 HTML 详细记录页面,如有必要,可以从多个数据点访问该页面。

于 2016-11-12T04:25:54.073 回答