这是我的对话服务的骨架伪代码:
//modal container is the template with backdrop
//and other modal elements (title, body, buttons, close button)
loadContainerTemplate()
//the actual html content for the modal body
.then(loadDialogTemplate)
.then(init);
function init() {
//append container to body
//append dialog template to modal body
//create new scope for the modal
//set up buttons, title, width, etc.
//listen for ESC keypress
//initialize modal controller if needed
//prepare close function (destroy scope, remove dom, execute close callbacks, etc)
//compile modal html against scope
}
我的服务将接受模态模板的 url、标题、宽度、按钮及其回调、父范围等参数。在您的控制器中,您只需像这样调用对话框:
function($scope, Dialog) {
Dialog({scope: $scope, templateUrl: 'path/to/modal/body', buttons: {
'agree': agreeCallback,
'disagree': disagreeCallback
}, title: 'Modal title'});
}
或者你可以更进一步,创建 TermsModalService 抽象模板、按钮、回调、标题等细节,并使用底层的 Modal 服务来显示实际的对话框。条款模式将很容易在所有具有单线的控制器之间使用:TermsDialogService.show();