.open(options)
打開對(duì)話窗口浑槽,在每次調(diào)用時(shí)創(chuàng)建新的對(duì)話框?qū)嵗搿=邮軐?duì)象作為唯一的參數(shù)焙畔。
參數(shù)選項(xiàng)Options:
template {String}
對(duì)話框模板可以通過所給路徑加載外部html模板或type="text/ng-template"的script標(biāo)簽县遣。
<script type="text/ng-template" id="templateId">
<h1>Template heading</h1>
<p>Content goes here</p>
</script>
ngDialog.open({ template: 'templateId' });
當(dāng)然虱咧,還可以使用簡(jiǎn)單的字符串作為模板和plain選項(xiàng)。
tips:
并不一定要將外部html模板放在script標(biāo)簽中种樱×衣樱可以將模板放在
$templateCache中:
angular.module('dialog.templates').run(['$templateCache', function($templateCache) {
$templateCache.put('templateId', 'template content');
}]);
然后可以將dialog.templates模塊包含在主模塊的依賴項(xiàng)中,并開始使用該模板作為templateId:
無需手動(dòng)執(zhí)行這些操作缸托,可以使用插件。 它們可用于不同的構(gòu)建系統(tǒng)瘾蛋,包括最受歡迎的Gulp / Grunt:
plain {Boolean}
默認(rèn)為false俐镐,如果為true則允許使用純字符串作為模板。
ngDialog.open({
template: '<p>my template</p>',
plain: true
});
controller {String} | {Array} | {Object}
controller是對(duì)話窗口的控制器哺哼。 控制器可以通過名稱引用或直接內(nèi)聯(lián)來指定佩抹。
ngDialog.open({
template: 'externalTemplate.html',
controller: 'SomeController'
});
//或者
ngDialog.open({
template: 'externalTemplate.html',
controller: ['$scope', 'otherService', function($scope,
otherService) {
// controller logic
}]
});
controllerAs {String}
可以選擇為控制器指定controllerAs參數(shù)。 然后在你的模板里面取董,可以把這個(gè)控制器引用給controllerAs指定的值棍苹。
AngularJS團(tuán)隊(duì)目前推薦使用controllerAs語(yǔ)法。
resolve {Object.<String, Function>}
(可選)給控制器注入依賴關(guān)系映射茵汰。 如果這些依賴關(guān)系中的任何一個(gè)都是promises【這里的promise不知道怎么翻】枢里,ngDialog將等待所有這些依賴關(guān)系解決,或者一個(gè)被拒絕,然后才能實(shí)例化控制器栏豺。
如果所有的promises都成功解決了彬碱,解決的promises值就會(huì)被注入。
映射對(duì)象如下:
- key – {String}: 要注入控制器的依賴項(xiàng)的名稱奥洼。
- factory - {String | Function}:如果是String類型巷疼,那么它是一個(gè)服務(wù)的別名。如果是Function灵奖,那么它將使用$ injector.invoke進(jìn)行注入嚼沿,返回依賴關(guān)系。如果返回的是一個(gè)promises瓷患,則在將其值注入到控制器之前解決骡尽。
ngDialog.open({
controller: function Ctrl(dep) {/*...*/},
resolve: {
dep: function depFactory() {
return 'dep value';
}
}
});
scope {Object}
將scope對(duì)象傳遞給對(duì)話框。如果使用具有單獨(dú)的$scope服務(wù)的控制器尉尾,則此對(duì)象將被傳遞到$scope.$parent:
$scope.value = true;
ngDialog.open({
template: 'externalTemplate.html',
className: 'ngdialog-theme-plain',
scope: $scope
});
<script type="text/ng-template" id="externalTemplate.html">
<p>External scope: <code>{{value}}</code></p>
</script>
scope.closeThisDialog(value)
.closeThisDialog(value)方法被注入到傳遞的$ scope中爆阶。這可以直接關(guān)閉彈出的對(duì)話框,例如:
<div class="dialog-contents">
<input type="text"/>
<input type="button" value="OK" ng-click="checkInput() && closeThisDialog('Some value')"/>
</div>
傳遞給此函數(shù)的任何值將附加到該對(duì)話框?qū)ο笊稀?對(duì)于使用openConfirm()方法打開的對(duì)話框沙咏,這個(gè)值被用作reject reason辨图。
data {String | Object | Array}
data表示任何要存儲(chǔ)在控制器對(duì)話框范圍內(nèi)的可序列化數(shù)據(jù)。
($scope.ngDialogData)肢藐。 從版本0.3.6 $scope.ngDialogData保持對(duì)對(duì)象的引用故河,而不是復(fù)制它們。
className {String}
此選項(xiàng)用于控制對(duì)話框的外觀吆豹,可以使用內(nèi)置主題或創(chuàng)建自己的樣式模式鱼的。
ngDialog.open({
template: 'templateId',
className: 'ngdialog-theme-default'
});
注意:如果沒有提到className,對(duì)話框?qū)o法正確顯示痘煤。
appendClassName {String}
不同于className屬性通過setDefaults()方法覆蓋指定的任何默認(rèn)類凑阶,appendClassName允許在任何默認(rèn)值之上添加一個(gè)類。
ngDialogProvider.setDefaults({
className: 'ngdialog-theme-default'
});
ngDialog.open({
template: 'template.html',
appendClassName: 'ngdialog-custom'
});
disableAnimation {Boolean}
如果為true衷快,則對(duì)話框的動(dòng)畫將被禁用宙橱,默認(rèn)為false。
overlay {Boolean}
如果為false蘸拔,則在dialog框中隱藏重疊div师郑,默認(rèn)為true。
showClose {Boolean}
如果為false调窍,則隱藏dialog框關(guān)閉按鈕宝冕,默認(rèn)為true。
closeByEscape {Boolean}
通過單擊Esc鍵關(guān)閉對(duì)話框邓萨,默認(rèn)為true地梨。
如果同時(shí)打開幾個(gè)對(duì)話框菊卷,單擊Esc鍵將關(guān)閉所有打開的對(duì)話框。
closeByNavigation {Boolean}
關(guān)閉對(duì)話框的狀態(tài)變更(history.back湿刽,$ state.go等)的烁,默認(rèn)為false。 兼容ui-router和angular-router诈闺。如果需要在返回或更改狀態(tài)時(shí)關(guān)閉對(duì)話框渴庆,應(yīng)該將此值設(shè)置為true。 如果需要在應(yīng)用中更改狀態(tài)時(shí)雅镊,對(duì)話框保持打開狀態(tài)襟雷,應(yīng)該將此值設(shè)置為false。
如果同時(shí)打開其中的幾個(gè)仁烹,狀態(tài)變更將關(guān)閉所有打開的對(duì)話框耸弄。
closeByDocument {Boolean}
通過點(diǎn)擊覆蓋背景關(guān)閉對(duì)話框,默認(rèn)為true卓缰。
appendTo {String}
指定元素添加到對(duì)話框?qū)嵗霞瞥剩邮茏址x擇器(例如#yourId,.yourClass)征唬。 如果沒有指定則默認(rèn)將body添加到對(duì)話框捌显。
cache {Boolean}
如果為false則禁用dialog緩存。 默認(rèn)為true总寒,用于開發(fā)目的扶歪。
name {String} | {Number}
給出一個(gè)對(duì)話框?qū)嵗拿Q。 如果打開了多個(gè)對(duì)話框摄闸,則識(shí)別特定對(duì)話框很有用善镰。
onOpenCallback {String} | {Function}
在打開對(duì)話框后提供要調(diào)用的函數(shù)或函數(shù)的名稱∧暾恚可以使用此回調(diào)代替ngdialog.opened事件炫欺。當(dāng)對(duì)話框附加到DOM并將要向用戶顯示時(shí)提供了一種注冊(cè)hook的方法。
preCloseCallback {String} | {Function}
在關(guān)閉對(duì)話框之前提供要調(diào)用的函數(shù)或函數(shù)的名稱熏兄。如果該選項(xiàng)中指定的回調(diào)函數(shù)返回false竣稽,則對(duì)話框?qū)⒉粫?huì)關(guān)閉』舻或者,如果回調(diào)函數(shù)返回一個(gè)解決的promise娃弓,對(duì)話框?qū)⒈魂P(guān)閉典格。
preCloseCallback函數(shù)接收作為與.close(id,value)相同的參數(shù)值台丛。
主要功能是能夠彈出對(duì)話框耍缴。包含用戶操作(例如編輯數(shù)據(jù))砾肺,能夠在退出對(duì)話框時(shí)(例如通過轉(zhuǎn)義鍵)確認(rèn)是否丟棄未保存的更改。
此示例在preCloseCallback函數(shù)中使用帶有window.confirm調(diào)用的內(nèi)聯(lián)函數(shù):
ngDialog.open({
preCloseCallback: function(value) {
if (confirm('Are you sure you want to close without saving your changes?')) {
return true;
}
return false;
}
});
在另一個(gè)示例中防嗡,使用具有嵌套確認(rèn)ngDialog的回調(diào)函數(shù):
ngDialog.open({
preCloseCallback: function(value) {
var nestedConfirmDialog = ngDialog.openConfirm({
template:'\
<p>Are you sure you want to close the parent dialog?</p>\
<div class="ngdialog-buttons">\
<button type="button" class="ngdialog-button ngdialog-button-secondary" ng-click="closeThisDialog(0)">No</button>\
<button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="confirm(1)">Yes</button>\
</div>',
plain: true
});
// NOTE: return the promise from openConfirm
return nestedConfirmDialog;
}
});
trapFocus {Boolean}
如果為true变汪,則可確保聚焦的元素保持在對(duì)話框內(nèi)以符合可訪問性建議。 默認(rèn)值為true蚁趁。
preserveFocus {Boolean}
如果為true裙盾,則關(guān)閉對(duì)話框后將焦點(diǎn)恢復(fù)到啟動(dòng)它的元素上。旨在改善鍵盤輔助功能他嫡。默認(rèn)為true番官。
ariaAuto {Boolean}
如果為true,則自動(dòng)為任何未指定的輔助功能屬性選擇適當(dāng)?shù)闹蹈质簟DJ(rèn)為true徘熔。
ariaRole {String}
指定應(yīng)用于對(duì)話框元素的角色屬性的值。默認(rèn)值為null(未指定)淆党。
ariaLabelledById {String}
指定應(yīng)用于對(duì)話框元素的aria-labelledby屬性的值酷师。默認(rèn)值為null(未指定)。
如果指定染乌,則該值不會(huì)針對(duì)DOM進(jìn)行驗(yàn)證山孔。
ariaLabelledBySelector {String}
指定對(duì)象元素上由aria-labelledby屬性引用的元素的CSS選擇器。默認(rèn)值為null(未指定)慕匠。
如果指定饱须,則使用第一個(gè)匹配元素。
ariaDescribedById {String}
指定應(yīng)用于對(duì)話框元素的aria描述的屬性的值台谊。默認(rèn)值為null(未指定)蓉媳。
如果指定,則該值不會(huì)針對(duì)DOM進(jìn)行驗(yàn)證锅铅。
ariaDescribedBySelector {String}
指定對(duì)象元素上由aria描述的屬性引用的元素的CSS選擇器酪呻。默認(rèn)值為null(未指定)。
如果指定盐须,則使用第一個(gè)匹配元素玩荠。
width {Number | String}
此選項(xiàng)用來控制對(duì)話框的寬度。默認(rèn)值為null(未指定)贼邓。
//寬度為400px
ngDialog.open({
template: 'template.html',
width: 400
});
//自定義百分比寬度
ngDialog.open({
template: 'template.html',
width: '40%'
});
height {Number | String}
此選項(xiàng)用來控制對(duì)話框的高度阶冈。默認(rèn)值為null(未指定)。
//高度為400px
ngDialog.open({
template: 'template.html',
height: 400
});
//自定義百分比高度
ngDialog.open({
template: 'template.html',
height: '40%'
});
返回值Returns:
open()方法返回一個(gè)具有一些有用屬性的對(duì)象塑径。
id {String}
這是剛剛創(chuàng)建的對(duì)話框的ID女坑。 它是對(duì)話框的DOM元素上的ID。
close(value) {Function}
這是一個(gè)函數(shù)统舀,它將關(guān)閉當(dāng)前調(diào)用open()打開的對(duì)話框匆骗。 它需要一個(gè)可選的值來傳遞給接近的promise劳景。
closePromise {Promise}
當(dāng)對(duì)話框關(guān)閉時(shí),將會(huì)解決promise碉就。通過一個(gè)對(duì)象盟广,包含:
- id-關(guān)閉對(duì)話框的ID
- value-關(guān)閉的對(duì)話框的值
- $dialog-此時(shí)已從DOM中刪除的對(duì)話框元素
- remainingDialogs-其余的對(duì)話框仍然打開
如果對(duì)話框被其中一個(gè)內(nèi)置機(jī)制('$escape', '$closeButton' 或者 '$document'.)關(guān)閉,value屬性將是一個(gè)特殊的字符串瓮钥。
var dialog = ngDialog.open({
template: 'templateId'
});
dialog.closePromise.then(function (data) {
console.log(data.id + ' has been dismissed.');
});
.setDefaults(options)
通過ngDialogProvider設(shè)置默認(rèn)設(shè)置:
var app = angular.module('myApp', ['ngDialog']);
app.config(['ngDialogProvider', function (ngDialogProvider) {
ngDialogProvider.setDefaults({
className: 'ngdialog-theme-default',
plain: true,
showClose: true,
closeByDocument: true,
closeByEscape: true
});
}]);
.openConfirm(options)
打開一個(gè)對(duì)話框筋量,默認(rèn)情況下,在對(duì)話窗口中點(diǎn)擊轉(zhuǎn)義或點(diǎn)擊時(shí)骏庸,該對(duì)話框不會(huì)關(guān)閉毛甲。該函數(shù)返回根據(jù)對(duì)話框關(guān)閉方式解析或拒絕的promise。
參數(shù)選項(xiàng)Options:
這個(gè)方法的參數(shù)選項(xiàng)與.open()方法相同具被,并添加了一個(gè)額外的函數(shù):
scope.confirm()
方法.confirm()也被注入到傳遞的$ scope中玻募。使用此方法關(guān)閉對(duì)話框并解決打開模態(tài)時(shí)返回的promise。
該函數(shù)接受一個(gè)可選參數(shù)一姿,該參數(shù)用作解析的promise的值七咧。
<div class="dialog-contents">
Some message
<button ng-click="closeThisDialog()">Cancel</button>
<button ng-click="confirm()">Confirm</button>
</div>
返回值Returns:
如果使用.confirm()函數(shù)來關(guān)閉對(duì)話框可以解決的Angular promise對(duì)象,否則promise被拒絕叮叹。解析值和拒絕原因由傳遞給confirm()或closeThisDialog()調(diào)用的值定義艾栋。
.isOpen(id)
方法接受對(duì)話框的id,并返回一個(gè)布爾值蛉顽,指示指定的對(duì)話框是否打開蝗砾。
.close(id, value)
方法接受對(duì)話框的id作為字符串參數(shù)來關(guān)閉特定的對(duì)話窗口,如果沒有指定id携冤,它將關(guān)閉所有當(dāng)前活動(dòng)的模式(與.closeAll()相同的行為)悼粮。使用(或所有對(duì)話框promise)解決對(duì)話框promise的可選值。
.closeAll(value)
方法管理關(guān)閉頁(yè)面上的所有活動(dòng)模式曾棕。 使用可選值來解決所有的對(duì)話框promise扣猫。
.getOpenDialogs()
返回包含打開的對(duì)話框的ID的數(shù)組。
.setForceHtmlReload({Boolean})
在每個(gè)$ locationChangeSuccess事件上添加一個(gè)附加偵聽器翘地,并將html的更新版本轉(zhuǎn)換為對(duì)話框申尤。
在某些罕見的情況下,當(dāng)應(yīng)用依賴于DOM更改時(shí)衙耕,可能會(huì)有用昧穿,默認(rèn)為false。
在ngDialogProvider中配置:
var app = angular.module('exampleApp', ['ngDialog']);
app.config(function (ngDialogProvider) {
ngDialogProvider.setForceHtmlReload(true);
});
.setForceBodyReload({Boolean})
在每個(gè)$ locationChangeSuccess事件上添加額外的偵聽器橙喘,并將更新版本的body轉(zhuǎn)換為對(duì)話框时鸵。
在某些罕見的情況下,當(dāng)應(yīng)用依賴于DOM更改時(shí)渴杆,可能會(huì)有用寥枝,默認(rèn)為false。
在ngDialogProvider中配置:
var app = angular.module('exampleApp', ['ngDialog']);
app.config(function (ngDialogProvider) {
ngDialogProvider.setForceBodyReload(true);
});
.setOpenOnePerName({Boolean})
默認(rèn)值:false
定義是否同時(shí)打開同名的對(duì)話框多次磁奖。 分配true可以防止打開第二個(gè)對(duì)話框囊拜。
在ngDialogProvider中配置:
var app = angular.module('exampleApp', ['ngDialog']);
app.config(function (ngDialogProvider) {
ngDialogProvider.setOpenOnePerName(true);
});
一定要記得在打開對(duì)話框時(shí)添加“名稱”。 如果對(duì)話框未打開比搭,ngDialog'open'和'openConfirm'函數(shù)將返回undefined冠跷。
指令Directive
默認(rèn)情況下,ngDialog模塊提供ngDialog指令身诺,可用作按鈕蜜托,鏈接等屬性。
幾乎所有.open()選項(xiàng)也可以通過標(biāo)簽屬性使用霉赡,唯一的區(qū)別是需要ng-template id或模板文件的路徑橄务。
例如:
<button type="button"
ng-dialog="templateId.html"
ng-dialog-class="ngdialog-theme-flat"
ng-dialog-controller="ModalCtrl"
ng-dialog-close-previous>
Open modal text
</button>
可以選擇使用ng-dialog-bind-to-controller將通過參數(shù)參數(shù)定義的范圍綁定到控制器。
有關(guān)bindToController的更多信息點(diǎn)擊此處穴亏。
指令包含另外一個(gè)但非常有用的選項(xiàng)蜂挪,它是一個(gè)名為ng-dialog-close-previous的屬性。 允許自動(dòng)關(guān)閉以前打開的對(duì)話框嗓化。