即使使用相同的代码段,也不会显示相同的按钮
Same buttons are not being displayed even if same piece of code is used
我试图在同一个 HTML 文件中重复使用同一个代码段。但是当我使用它时,它在第一次使用这段代码时正确显示,而在使用 2 次或更多次时显示不同的内容。为什么会这样?
这是我的代码。请帮我解决这个问题。
(function (angular, undefined) {
"use strict";
angular
.module("demoApp", ["ngMaterial"])
.controller("PrintController", PrintDisplay)
.controller("InvoiceController", InvoiceController);
// Fictitious Employee Editor to show how to use simple and complex dialogs.
function PrintDisplay($scope, $mdDialog) {
var alert;
$scope.showPrint = showInvoicePrint;
function showInvoicePrint($event) {
$mdDialog.show({
targetEvent: $event,
template:
'<md-dialog id="print-section" class="printSection">' +
' <md-dialog-content style="min-width:600px;">' +
' <md-content flex="" layout-padding="">' +
' <div class="invoice-box"> ' +
' <table cellpadding="0" cellspacing="0"> ' +
' <tr class="top"> ' +
' <td colspan="2"> ' +
" <table> " +
" <tr> " +
' <td class="title"> ' +
" </td> " +
" <td> " +
" Invoice #: 123<br> " +
" Created: January 1, 2015<br> " +
" Due: February 1, 2015 " +
" </td> " +
" </tr> " +
" </table> " +
" </td> " +
" </tr> " +
' <tr class="information"> ' +
' <td colspan="2"> ' +
" <table> " +
" <tr> " +
" <td> " +
" Next Step Webs, Inc.<br> " +
" 12345 Sunny Road<br> " +
" Sunnyville, TX 12345 " +
" </td> " +
" <td> " +
" Acme Corp.<br> " +
" John Doe<br> " +
" john@example.com " +
" </td> " +
" </tr> " +
" </table> " +
" </td> " +
" </tr> " +
' <tr class="heading"> ' +
" <td> " +
" Payment Method " +
" </td> " +
" <td> " +
" Check # " +
" </td> " +
" </tr> " +
' <tr class="details"> ' +
" <td> " +
" Check " +
" </td> " +
" <td> " +
" 1000 " +
" </td> " +
" </tr> " +
' <tr class="heading"> ' +
" <td> " +
" Item " +
" </td> " +
" <td> " +
" Price " +
" </td> " +
" </tr> " +
' <tr class="item"> ' +
" <td> " +
" Website design " +
" </td> " +
" <td> " +
" 300 " +
" </td> " +
" </tr> " +
' <tr class="item"> ' +
" <td> " +
" Hosting (3 months) " +
" </td> " +
" <td> " +
" 75 " +
" </td> " +
" </tr> " +
' <tr class="item last"> ' +
" <td> " +
" Domain name (1 year) " +
" </td> " +
" <td> " +
" 10 " +
" </td> " +
" </tr> " +
' <tr class="total"> ' +
" <td></td> " +
" <td> " +
" Total: 5.00 " +
" </td> " +
" </tr> " +
" </table> " +
" </div> " +
" </md-content>" +
" </md-dialog-content>" +
' <md-dialog-actions layout="row">' +
" <!-- for demo on how to print see https://jsfiddle.net/ozkary/3zu008ch/ -->" +
' <md-button class="md-raised md-primary" ng-click="closeDialog();">Close</md-button>' +
' <md-button class="md-raised md-primary" ng-click="print();">Print</md-button>' +
" </md-dialog-actions>" +
"</md-dialog>",
controller: "InvoiceController",
onComplete: afterShowAnimation,
locals: { employee: $scope.userName },
});
// When the 'enter' animation finishes...
function afterShowAnimation(scope, element, options) {
// post-show code here: DOM element focus, etc.
}
}
}
// Greeting controller used with the more complex 'showCustomGreeting()' custom dialog
function InvoiceController($scope, $mdDialog) {
$scope.print = function () {
var contents = document.getElementById("print-section").innerHTML;
var frame1 = document.createElement("iframe");
frame1.name = "frame3";
frame1.style.position = "absolute";
frame1.style.top = "-1000000px";
document.body.appendChild(frame1);
var frameDoc = frame1.contentWindow
? frame1.contentWindow
: frame1.contentDocument.document
? frame1.contentDocument.document
: frame1.contentDocument;
frameDoc.document.open();
frameDoc.document.write(
"<html><head> <style>md-dialog-actions{display:none}.invoice-box{max-width:800px;margin:auto;padding:30px;border:1px solid #eee;box-shadow:0 0 10px rgba(0,0,0,.15);font-size:16px;line-height:24px;color:#555}.invoice-box table{width:100%;line-height:inherit;text-align:left}.invoice-box table td{padding:5px;vertical-align:top}.invoice-box table tr td:nth-child(2){text-align:right}.invoice-box table tr.top table td{padding-bottom:20px}.invoice-box table tr.top table td.title{font-size:45px;line-height:45px;color:#333}.invoice-box table tr.information table td{padding-bottom:40px}.invoice-box table tr.heading td{background:#eee;border-bottom:1px solid #ddd;font-weight:700}.invoice-box table tr.details td{padding-bottom:20px}.invoice-box table tr.item td{border-bottom:1px solid #eee}.invoice-box table tr.item.last td{border-bottom:none}.invoice-box table tr.total td:nth-child(2){border-top:2px solid #eee;font-weight:700} </style>"
);
frameDoc.document.write("</head><body>");
frameDoc.document.write(contents);
frameDoc.document.write("</body></html>");
frameDoc.document.close();
setTimeout(function () {
window.frames["frame3"].focus();
window.frames["frame3"].print();
document.body.removeChild(frame1);
}, 500);
return false;
//window.print();
};
$scope.closeDialog = function () {
// Easily hides most recent dialog shown...
// no specific instance reference is needed.
$mdDialog.hide();
};
}
})(angular);
.invoice-box{
max-width:800px;
margin:auto;
padding:30px;
border:1px solid #eee;
box-shadow:0 0 10px rgba(0, 0, 0, .15);
font-size:16px;
line-height:24px;
font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;
color:#555;
}
.invoice-box table{
width:100%;
line-height:inherit;
text-align:left;
}
.invoice-box table td{
padding:5px;
vertical-align:top;
}
.invoice-box table tr td:nth-child(2){
text-align:right;
}
.invoice-box table tr.top table td{
padding-bottom:20px;
}
.invoice-box table tr.top table td.title{
font-size:45px;
line-height:45px;
color:#333;
}
.invoice-box table tr.information table td{
padding-bottom:40px;
}
.invoice-box table tr.heading td{
background:#eee;
border-bottom:1px solid #ddd;
font-weight:bold;
}
.invoice-box table tr.details td{
padding-bottom:20px;
}
.invoice-box table tr.item td{
border-bottom:1px solid #eee;
}
.invoice-box table tr.item.last td{
border-bottom:none;
}
.invoice-box table tr.total td:nth-child(2){
border-top:2px solid #eee;
font-weight:bold;
}
@media only screen and (max-width: 600px) {
.invoice-box table tr.top table td{
width:100%;
display:block;
text-align:center;
}
.invoice-box table tr.information table td{
width:100%;
display:block;
text-align:center;
}
}
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet"
crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/js/all.min.js"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script>
<div ng-app="demoApp" ng-controller="PrintController">
<md-button class="md-raised md-primary" ng-click="showPrint($event)">
Print Invoice
</md-button>
</div>
</div>
<div ng-app="demoApp" ng-controller="PrintController">
<md-button class="md-raised md-primary" ng-click="showPrint($event)">
Print Invoice
</md-button>
</div>
</div>
我删除了每个按钮的 ng-app。整个事情是一个应用程序。
(function (angular, undefined) {
"use strict";
angular
.module("demoApp", ["ngMaterial"])
.controller("PrintController", PrintDisplay)
.controller("InvoiceController", InvoiceController);
// Fictitious Employee Editor to show how to use simple and complex dialogs.
function PrintDisplay($scope, $mdDialog) {
var alert;
$scope.showPrint = showInvoicePrint;
function showInvoicePrint($event) {
$mdDialog.show({
targetEvent: $event,
template:
'<md-dialog id="print-section" class="printSection">' +
' <md-dialog-content style="min-width:600px;">' +
' <md-content flex="" layout-padding="">' +
' <div class="invoice-box"> ' +
' <table cellpadding="0" cellspacing="0"> ' +
' <tr class="top"> ' +
' <td colspan="2"> ' +
" <table> " +
" <tr> " +
' <td class="title"> ' +
" </td> " +
" <td> " +
" Invoice #: 123<br> " +
" Created: January 1, 2015<br> " +
" Due: February 1, 2015 " +
" </td> " +
" </tr> " +
" </table> " +
" </td> " +
" </tr> " +
' <tr class="information"> ' +
' <td colspan="2"> ' +
" <table> " +
" <tr> " +
" <td> " +
" Next Step Webs, Inc.<br> " +
" 12345 Sunny Road<br> " +
" Sunnyville, TX 12345 " +
" </td> " +
" <td> " +
" Acme Corp.<br> " +
" John Doe<br> " +
" john@example.com " +
" </td> " +
" </tr> " +
" </table> " +
" </td> " +
" </tr> " +
' <tr class="heading"> ' +
" <td> " +
" Payment Method " +
" </td> " +
" <td> " +
" Check # " +
" </td> " +
" </tr> " +
' <tr class="details"> ' +
" <td> " +
" Check " +
" </td> " +
" <td> " +
" 1000 " +
" </td> " +
" </tr> " +
' <tr class="heading"> ' +
" <td> " +
" Item " +
" </td> " +
" <td> " +
" Price " +
" </td> " +
" </tr> " +
' <tr class="item"> ' +
" <td> " +
" Website design " +
" </td> " +
" <td> " +
" 300 " +
" </td> " +
" </tr> " +
' <tr class="item"> ' +
" <td> " +
" Hosting (3 months) " +
" </td> " +
" <td> " +
" 75 " +
" </td> " +
" </tr> " +
' <tr class="item last"> ' +
" <td> " +
" Domain name (1 year) " +
" </td> " +
" <td> " +
" 10 " +
" </td> " +
" </tr> " +
' <tr class="total"> ' +
" <td></td> " +
" <td> " +
" Total: 5.00 " +
" </td> " +
" </tr> " +
" </table> " +
" </div> " +
" </md-content>" +
" </md-dialog-content>" +
' <md-dialog-actions layout="row">' +
" <!-- for demo on how to print see https://jsfiddle.net/ozkary/3zu008ch/ -->" +
' <md-button class="md-raised md-primary" ng-click="closeDialog();">Close</md-button>' +
' <md-button class="md-raised md-primary" ng-click="print();">Print</md-button>' +
" </md-dialog-actions>" +
"</md-dialog>",
controller: "InvoiceController",
onComplete: afterShowAnimation,
locals: { employee: $scope.userName },
});
// When the 'enter' animation finishes...
function afterShowAnimation(scope, element, options) {
// post-show code here: DOM element focus, etc.
}
}
}
// Greeting controller used with the more complex 'showCustomGreeting()' custom dialog
function InvoiceController($scope, $mdDialog) {
$scope.print = function () {
var contents = document.getElementById("print-section").innerHTML;
var frame1 = document.createElement("iframe");
frame1.name = "frame3";
frame1.style.position = "absolute";
frame1.style.top = "-1000000px";
document.body.appendChild(frame1);
var frameDoc = frame1.contentWindow
? frame1.contentWindow
: frame1.contentDocument.document
? frame1.contentDocument.document
: frame1.contentDocument;
frameDoc.document.open();
frameDoc.document.write(
"<html><head> <style>md-dialog-actions{display:none}.invoice-box{max-width:800px;margin:auto;padding:30px;border:1px solid #eee;box-shadow:0 0 10px rgba(0,0,0,.15);font-size:16px;line-height:24px;color:#555}.invoice-box table{width:100%;line-height:inherit;text-align:left}.invoice-box table td{padding:5px;vertical-align:top}.invoice-box table tr td:nth-child(2){text-align:right}.invoice-box table tr.top table td{padding-bottom:20px}.invoice-box table tr.top table td.title{font-size:45px;line-height:45px;color:#333}.invoice-box table tr.information table td{padding-bottom:40px}.invoice-box table tr.heading td{background:#eee;border-bottom:1px solid #ddd;font-weight:700}.invoice-box table tr.details td{padding-bottom:20px}.invoice-box table tr.item td{border-bottom:1px solid #eee}.invoice-box table tr.item.last td{border-bottom:none}.invoice-box table tr.total td:nth-child(2){border-top:2px solid #eee;font-weight:700} </style>"
);
frameDoc.document.write("</head><body>");
frameDoc.document.write(contents);
frameDoc.document.write("</body></html>");
frameDoc.document.close();
setTimeout(function () {
window.frames["frame3"].focus();
window.frames["frame3"].print();
document.body.removeChild(frame1);
}, 500);
return false;
//window.print();
};
$scope.closeDialog = function () {
// Easily hides most recent dialog shown...
// no specific instance reference is needed.
$mdDialog.hide();
};
}
})(angular);
.invoice-box{
max-width:800px;
margin:auto;
padding:30px;
border:1px solid #eee;
box-shadow:0 0 10px rgba(0, 0, 0, .15);
font-size:16px;
line-height:24px;
font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;
color:#555;
}
.invoice-box table{
width:100%;
line-height:inherit;
text-align:left;
}
.invoice-box table td{
padding:5px;
vertical-align:top;
}
.invoice-box table tr td:nth-child(2){
text-align:right;
}
.invoice-box table tr.top table td{
padding-bottom:20px;
}
.invoice-box table tr.top table td.title{
font-size:45px;
line-height:45px;
color:#333;
}
.invoice-box table tr.information table td{
padding-bottom:40px;
}
.invoice-box table tr.heading td{
background:#eee;
border-bottom:1px solid #ddd;
font-weight:bold;
}
.invoice-box table tr.details td{
padding-bottom:20px;
}
.invoice-box table tr.item td{
border-bottom:1px solid #eee;
}
.invoice-box table tr.item.last td{
border-bottom:none;
}
.invoice-box table tr.total td:nth-child(2){
border-top:2px solid #eee;
font-weight:bold;
}
@media only screen and (max-width: 600px) {
.invoice-box table tr.top table td{
width:100%;
display:block;
text-align:center;
}
.invoice-box table tr.information table td{
width:100%;
display:block;
text-align:center;
}
}
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet"
crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/js/all.min.js"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script>
<div ng-app="demoApp">
<div ng-controller="PrintController">
<md-button class="md-raised md-primary" ng-click="showPrint($event)">
Print Invoice
</md-button>
</div>
<div ng-controller="PrintController">
<md-button class="md-raised md-primary" ng-click="showPrint($event)">
Print Invoice
</md-button>
</div>
</div>
我试图在同一个 HTML 文件中重复使用同一个代码段。但是当我使用它时,它在第一次使用这段代码时正确显示,而在使用 2 次或更多次时显示不同的内容。为什么会这样?
这是我的代码。请帮我解决这个问题。
(function (angular, undefined) {
"use strict";
angular
.module("demoApp", ["ngMaterial"])
.controller("PrintController", PrintDisplay)
.controller("InvoiceController", InvoiceController);
// Fictitious Employee Editor to show how to use simple and complex dialogs.
function PrintDisplay($scope, $mdDialog) {
var alert;
$scope.showPrint = showInvoicePrint;
function showInvoicePrint($event) {
$mdDialog.show({
targetEvent: $event,
template:
'<md-dialog id="print-section" class="printSection">' +
' <md-dialog-content style="min-width:600px;">' +
' <md-content flex="" layout-padding="">' +
' <div class="invoice-box"> ' +
' <table cellpadding="0" cellspacing="0"> ' +
' <tr class="top"> ' +
' <td colspan="2"> ' +
" <table> " +
" <tr> " +
' <td class="title"> ' +
" </td> " +
" <td> " +
" Invoice #: 123<br> " +
" Created: January 1, 2015<br> " +
" Due: February 1, 2015 " +
" </td> " +
" </tr> " +
" </table> " +
" </td> " +
" </tr> " +
' <tr class="information"> ' +
' <td colspan="2"> ' +
" <table> " +
" <tr> " +
" <td> " +
" Next Step Webs, Inc.<br> " +
" 12345 Sunny Road<br> " +
" Sunnyville, TX 12345 " +
" </td> " +
" <td> " +
" Acme Corp.<br> " +
" John Doe<br> " +
" john@example.com " +
" </td> " +
" </tr> " +
" </table> " +
" </td> " +
" </tr> " +
' <tr class="heading"> ' +
" <td> " +
" Payment Method " +
" </td> " +
" <td> " +
" Check # " +
" </td> " +
" </tr> " +
' <tr class="details"> ' +
" <td> " +
" Check " +
" </td> " +
" <td> " +
" 1000 " +
" </td> " +
" </tr> " +
' <tr class="heading"> ' +
" <td> " +
" Item " +
" </td> " +
" <td> " +
" Price " +
" </td> " +
" </tr> " +
' <tr class="item"> ' +
" <td> " +
" Website design " +
" </td> " +
" <td> " +
" 300 " +
" </td> " +
" </tr> " +
' <tr class="item"> ' +
" <td> " +
" Hosting (3 months) " +
" </td> " +
" <td> " +
" 75 " +
" </td> " +
" </tr> " +
' <tr class="item last"> ' +
" <td> " +
" Domain name (1 year) " +
" </td> " +
" <td> " +
" 10 " +
" </td> " +
" </tr> " +
' <tr class="total"> ' +
" <td></td> " +
" <td> " +
" Total: 5.00 " +
" </td> " +
" </tr> " +
" </table> " +
" </div> " +
" </md-content>" +
" </md-dialog-content>" +
' <md-dialog-actions layout="row">' +
" <!-- for demo on how to print see https://jsfiddle.net/ozkary/3zu008ch/ -->" +
' <md-button class="md-raised md-primary" ng-click="closeDialog();">Close</md-button>' +
' <md-button class="md-raised md-primary" ng-click="print();">Print</md-button>' +
" </md-dialog-actions>" +
"</md-dialog>",
controller: "InvoiceController",
onComplete: afterShowAnimation,
locals: { employee: $scope.userName },
});
// When the 'enter' animation finishes...
function afterShowAnimation(scope, element, options) {
// post-show code here: DOM element focus, etc.
}
}
}
// Greeting controller used with the more complex 'showCustomGreeting()' custom dialog
function InvoiceController($scope, $mdDialog) {
$scope.print = function () {
var contents = document.getElementById("print-section").innerHTML;
var frame1 = document.createElement("iframe");
frame1.name = "frame3";
frame1.style.position = "absolute";
frame1.style.top = "-1000000px";
document.body.appendChild(frame1);
var frameDoc = frame1.contentWindow
? frame1.contentWindow
: frame1.contentDocument.document
? frame1.contentDocument.document
: frame1.contentDocument;
frameDoc.document.open();
frameDoc.document.write(
"<html><head> <style>md-dialog-actions{display:none}.invoice-box{max-width:800px;margin:auto;padding:30px;border:1px solid #eee;box-shadow:0 0 10px rgba(0,0,0,.15);font-size:16px;line-height:24px;color:#555}.invoice-box table{width:100%;line-height:inherit;text-align:left}.invoice-box table td{padding:5px;vertical-align:top}.invoice-box table tr td:nth-child(2){text-align:right}.invoice-box table tr.top table td{padding-bottom:20px}.invoice-box table tr.top table td.title{font-size:45px;line-height:45px;color:#333}.invoice-box table tr.information table td{padding-bottom:40px}.invoice-box table tr.heading td{background:#eee;border-bottom:1px solid #ddd;font-weight:700}.invoice-box table tr.details td{padding-bottom:20px}.invoice-box table tr.item td{border-bottom:1px solid #eee}.invoice-box table tr.item.last td{border-bottom:none}.invoice-box table tr.total td:nth-child(2){border-top:2px solid #eee;font-weight:700} </style>"
);
frameDoc.document.write("</head><body>");
frameDoc.document.write(contents);
frameDoc.document.write("</body></html>");
frameDoc.document.close();
setTimeout(function () {
window.frames["frame3"].focus();
window.frames["frame3"].print();
document.body.removeChild(frame1);
}, 500);
return false;
//window.print();
};
$scope.closeDialog = function () {
// Easily hides most recent dialog shown...
// no specific instance reference is needed.
$mdDialog.hide();
};
}
})(angular);
.invoice-box{
max-width:800px;
margin:auto;
padding:30px;
border:1px solid #eee;
box-shadow:0 0 10px rgba(0, 0, 0, .15);
font-size:16px;
line-height:24px;
font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;
color:#555;
}
.invoice-box table{
width:100%;
line-height:inherit;
text-align:left;
}
.invoice-box table td{
padding:5px;
vertical-align:top;
}
.invoice-box table tr td:nth-child(2){
text-align:right;
}
.invoice-box table tr.top table td{
padding-bottom:20px;
}
.invoice-box table tr.top table td.title{
font-size:45px;
line-height:45px;
color:#333;
}
.invoice-box table tr.information table td{
padding-bottom:40px;
}
.invoice-box table tr.heading td{
background:#eee;
border-bottom:1px solid #ddd;
font-weight:bold;
}
.invoice-box table tr.details td{
padding-bottom:20px;
}
.invoice-box table tr.item td{
border-bottom:1px solid #eee;
}
.invoice-box table tr.item.last td{
border-bottom:none;
}
.invoice-box table tr.total td:nth-child(2){
border-top:2px solid #eee;
font-weight:bold;
}
@media only screen and (max-width: 600px) {
.invoice-box table tr.top table td{
width:100%;
display:block;
text-align:center;
}
.invoice-box table tr.information table td{
width:100%;
display:block;
text-align:center;
}
}
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet"
crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/js/all.min.js"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script>
<div ng-app="demoApp" ng-controller="PrintController">
<md-button class="md-raised md-primary" ng-click="showPrint($event)">
Print Invoice
</md-button>
</div>
</div>
<div ng-app="demoApp" ng-controller="PrintController">
<md-button class="md-raised md-primary" ng-click="showPrint($event)">
Print Invoice
</md-button>
</div>
</div>
我删除了每个按钮的 ng-app。整个事情是一个应用程序。
(function (angular, undefined) {
"use strict";
angular
.module("demoApp", ["ngMaterial"])
.controller("PrintController", PrintDisplay)
.controller("InvoiceController", InvoiceController);
// Fictitious Employee Editor to show how to use simple and complex dialogs.
function PrintDisplay($scope, $mdDialog) {
var alert;
$scope.showPrint = showInvoicePrint;
function showInvoicePrint($event) {
$mdDialog.show({
targetEvent: $event,
template:
'<md-dialog id="print-section" class="printSection">' +
' <md-dialog-content style="min-width:600px;">' +
' <md-content flex="" layout-padding="">' +
' <div class="invoice-box"> ' +
' <table cellpadding="0" cellspacing="0"> ' +
' <tr class="top"> ' +
' <td colspan="2"> ' +
" <table> " +
" <tr> " +
' <td class="title"> ' +
" </td> " +
" <td> " +
" Invoice #: 123<br> " +
" Created: January 1, 2015<br> " +
" Due: February 1, 2015 " +
" </td> " +
" </tr> " +
" </table> " +
" </td> " +
" </tr> " +
' <tr class="information"> ' +
' <td colspan="2"> ' +
" <table> " +
" <tr> " +
" <td> " +
" Next Step Webs, Inc.<br> " +
" 12345 Sunny Road<br> " +
" Sunnyville, TX 12345 " +
" </td> " +
" <td> " +
" Acme Corp.<br> " +
" John Doe<br> " +
" john@example.com " +
" </td> " +
" </tr> " +
" </table> " +
" </td> " +
" </tr> " +
' <tr class="heading"> ' +
" <td> " +
" Payment Method " +
" </td> " +
" <td> " +
" Check # " +
" </td> " +
" </tr> " +
' <tr class="details"> ' +
" <td> " +
" Check " +
" </td> " +
" <td> " +
" 1000 " +
" </td> " +
" </tr> " +
' <tr class="heading"> ' +
" <td> " +
" Item " +
" </td> " +
" <td> " +
" Price " +
" </td> " +
" </tr> " +
' <tr class="item"> ' +
" <td> " +
" Website design " +
" </td> " +
" <td> " +
" 300 " +
" </td> " +
" </tr> " +
' <tr class="item"> ' +
" <td> " +
" Hosting (3 months) " +
" </td> " +
" <td> " +
" 75 " +
" </td> " +
" </tr> " +
' <tr class="item last"> ' +
" <td> " +
" Domain name (1 year) " +
" </td> " +
" <td> " +
" 10 " +
" </td> " +
" </tr> " +
' <tr class="total"> ' +
" <td></td> " +
" <td> " +
" Total: 5.00 " +
" </td> " +
" </tr> " +
" </table> " +
" </div> " +
" </md-content>" +
" </md-dialog-content>" +
' <md-dialog-actions layout="row">' +
" <!-- for demo on how to print see https://jsfiddle.net/ozkary/3zu008ch/ -->" +
' <md-button class="md-raised md-primary" ng-click="closeDialog();">Close</md-button>' +
' <md-button class="md-raised md-primary" ng-click="print();">Print</md-button>' +
" </md-dialog-actions>" +
"</md-dialog>",
controller: "InvoiceController",
onComplete: afterShowAnimation,
locals: { employee: $scope.userName },
});
// When the 'enter' animation finishes...
function afterShowAnimation(scope, element, options) {
// post-show code here: DOM element focus, etc.
}
}
}
// Greeting controller used with the more complex 'showCustomGreeting()' custom dialog
function InvoiceController($scope, $mdDialog) {
$scope.print = function () {
var contents = document.getElementById("print-section").innerHTML;
var frame1 = document.createElement("iframe");
frame1.name = "frame3";
frame1.style.position = "absolute";
frame1.style.top = "-1000000px";
document.body.appendChild(frame1);
var frameDoc = frame1.contentWindow
? frame1.contentWindow
: frame1.contentDocument.document
? frame1.contentDocument.document
: frame1.contentDocument;
frameDoc.document.open();
frameDoc.document.write(
"<html><head> <style>md-dialog-actions{display:none}.invoice-box{max-width:800px;margin:auto;padding:30px;border:1px solid #eee;box-shadow:0 0 10px rgba(0,0,0,.15);font-size:16px;line-height:24px;color:#555}.invoice-box table{width:100%;line-height:inherit;text-align:left}.invoice-box table td{padding:5px;vertical-align:top}.invoice-box table tr td:nth-child(2){text-align:right}.invoice-box table tr.top table td{padding-bottom:20px}.invoice-box table tr.top table td.title{font-size:45px;line-height:45px;color:#333}.invoice-box table tr.information table td{padding-bottom:40px}.invoice-box table tr.heading td{background:#eee;border-bottom:1px solid #ddd;font-weight:700}.invoice-box table tr.details td{padding-bottom:20px}.invoice-box table tr.item td{border-bottom:1px solid #eee}.invoice-box table tr.item.last td{border-bottom:none}.invoice-box table tr.total td:nth-child(2){border-top:2px solid #eee;font-weight:700} </style>"
);
frameDoc.document.write("</head><body>");
frameDoc.document.write(contents);
frameDoc.document.write("</body></html>");
frameDoc.document.close();
setTimeout(function () {
window.frames["frame3"].focus();
window.frames["frame3"].print();
document.body.removeChild(frame1);
}, 500);
return false;
//window.print();
};
$scope.closeDialog = function () {
// Easily hides most recent dialog shown...
// no specific instance reference is needed.
$mdDialog.hide();
};
}
})(angular);
.invoice-box{
max-width:800px;
margin:auto;
padding:30px;
border:1px solid #eee;
box-shadow:0 0 10px rgba(0, 0, 0, .15);
font-size:16px;
line-height:24px;
font-family:'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;
color:#555;
}
.invoice-box table{
width:100%;
line-height:inherit;
text-align:left;
}
.invoice-box table td{
padding:5px;
vertical-align:top;
}
.invoice-box table tr td:nth-child(2){
text-align:right;
}
.invoice-box table tr.top table td{
padding-bottom:20px;
}
.invoice-box table tr.top table td.title{
font-size:45px;
line-height:45px;
color:#333;
}
.invoice-box table tr.information table td{
padding-bottom:40px;
}
.invoice-box table tr.heading td{
background:#eee;
border-bottom:1px solid #ddd;
font-weight:bold;
}
.invoice-box table tr.details td{
padding-bottom:20px;
}
.invoice-box table tr.item td{
border-bottom:1px solid #eee;
}
.invoice-box table tr.item.last td{
border-bottom:none;
}
.invoice-box table tr.total td:nth-child(2){
border-top:2px solid #eee;
font-weight:bold;
}
@media only screen and (max-width: 600px) {
.invoice-box table tr.top table td{
width:100%;
display:block;
text-align:center;
}
.invoice-box table tr.information table td{
width:100%;
display:block;
text-align:center;
}
}
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet"
crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/js/all.min.js"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script>
<div ng-app="demoApp">
<div ng-controller="PrintController">
<md-button class="md-raised md-primary" ng-click="showPrint($event)">
Print Invoice
</md-button>
</div>
<div ng-controller="PrintController">
<md-button class="md-raised md-primary" ng-click="showPrint($event)">
Print Invoice
</md-button>
</div>
</div>