AngularJs ngNotify单击时关闭

时间:2018-08-01 13:40:15

标签: angularjs ngnotify

我被要求在我们的通知中添加点击关闭功能(由ngNotify提供)。我以为这是一个简单的任务,但是默认情况下我找不到此功能。 最初,我创建了一个针对类 ngn-sticky 的指令。就是这样:

angular.module('sapphire.directives').directive('ngnSticky', directive);

function directive(ngNotify) {
    return {
        restrict: 'C',
        link: lnkFn
    };

    function lnkFn(scope, element, attrs, controller) {
        element.on('click', function (e) {
            ngNotify.dismiss();
            e.preventDefault();
        });
    };
};

但是这没有用。我在带有通知的页面上添加了一个按钮,并给它提供了 ngn-sticky 类,它确实起作用了,但是效果并不理想。 因此,尽管我可以像使用 angular-bootstrap 一样覆盖模板,但是我查看了实际的指令,发现它没有 templateUrl 可以覆盖。

有人知道我可以如何覆盖模板吗?还是以某种方式将onclick方法添加到任何ngNotify消息中?

1 个答案:

答案 0 :(得分:1)

覆盖模板不是一个好的解决方案,因为您然后隐式依赖于外部库的内部!

无论如何,in their source code您会看到一个模板被放入$templateCache

function ngNotifyCache($templateCache) {

    var html =
    '<div class="ngn" ng-class="ngNotify.notifyClass">' +
        '<span ng-if="ngNotify.notifyHtml" class="ngn-message" ng-bind-html="ngNotify.notifyMessage"></span>' + // Display HTML notifications.
        '<span ng-if="!ngNotify.notifyHtml" class="ngn-message" ng-bind="ngNotify.notifyMessage"></span>' + // Display escaped notifications.
        '<span ng-show="ngNotify.notifyButton" class="ngn-dismiss" ng-click="dismiss()">&times;</span>' +
    '</div>';

    $templateCache.put(TEMPLATE, html);
}

您应该能够通过仅使用具有相同键的新模板来覆盖它。只是需要找到适当的时间。我认为,新模板在整个div上都需要一个ng-click属性。

源:https://docs.angularjs.org/api/ng/service/ $ templateCache,https://docs.angularjs.org/api/ng/type/ $ cacheFactory.Cache