为 $confirm 对话框提供模板

Providing a template for $confirm dialogs

我正在使用 angular-confirm 在我的应用程序的很多地方显示确认消息。例如:

$confirm({
    text: 'content',
    title: 'title text',
    ok: 'Yes',
    cancel: 'No'})
.then(function() {
    doSomething();
});

我想全局更改这些对话框在应用程序中的显示布局。我知道 angular-confirm 允许您像这样进行全局更改:

$confirmModalDefaults.templateUrl = 'path/to/your/template';

然而,这也覆盖了所有 $modal.open() 调用的模板,这不是我想要的。

我认为实现此目的的方法是使用提供程序将模板 url 附加到应用程序中的每个 $confirm 调用,但我不确定具体如何操作。

如何为 $confirm 创建一个提供程序并在每次调用时附加一个 templateUrl 参数?

想通了:

function config($provide) {
    $provide.decorator('$confirm', confirmProvider);
}

/* @ngInject */
function confirmProvider($delegate) {
    return function (data, settings) {
        if (settings && !settings.template && !settings.templateUrl) {
            settings.template = '<div>my confirm content</div>';
    } else {
        settings = {
            template: '<div>my confirm content</div>'
        }
    }

    return $delegate(data, settings);
};

现在,当使用数据 and/or 设置调用 $confirm() 时,它将应用我的自定义模板,除非它是由调用者指定的