我被要求在我们的通知中添加点击关闭功能(由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消息中?
答案 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()">×</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