Использование директив с ngSanitize в AngularJS

В моем приложении есть очень простой контроллер, задачей которого является отображение сообщений:

angular.module("app.components.messages", ['ngSanitize'])

.controller("MessageBoxController", ['$scope', function($scope)
{
    $scope.messageType = 'info';
    $scope.hidden = true;

    $scope.$on('message.error', function(event, message)
    {
        $scope.message = message;
        $scope.messageType = 'error';
        $scope.hidden = false;
    });

    $scope.$on('message.warning', function(event, message)
    {
        $scope.message = message;
        $scope.messageType = 'warning';
        $scope.hidden = false;
    });
}]);

Тогда само окно сообщения довольно прямолинейно:

<div id="message-box" ng-controller="MessageBoxController"></div>

Я использую ngSanitize, потому что иногда хочу вставлять ссылки в сообщения. Например, в другом контроллере я могу сделать:

$rootScope.$broadcast('message.warning', 'You are about to download ' + file.name + ' which is ' + file.size + '. Your current quota is ' + user.quotaRemaining + ' click <a href="' + url + '">here</a> to confirm.'); 

И это работает, и выводит ссылку и все. Однако в этом конкретном случае, после того как пользователь щелкнул ссылку, я хотел бы, чтобы он затем запускал другую функцию для обновления информации о квоте пользователя. Я наивно пытался нажать ng-click на свой тег, но оказалось, что ngSanitize отфильтровывает определенные атрибуты, так что это не сработало.

Как я могу заставить что-то происходить после нажатия ссылки в сообщении? Мне не обязательно использовать ngSanitize, я просто использовал его, потому что он показался мне удобным.


person Cameron Ball    schedule 04.12.2014    source источник


Ответы (1)


Здесь решена аналогичная проблема. Просто переименуйте директиву и перейдите к директиве, которую вы message. Например:

<div message="message"></div>
person Mikalai    schedule 04.12.2014
comment
Это почти работает. Часть ng-click больше не удаляется, однако, когда я нажимаю на ссылку, функция не вызывается. Никаких сообщений об ошибках в консоли или что-то в этом роде :\ - person Cameron Ball; 04.12.2014
comment
Хорошо, проблема была связана с масштабом. Когда я передаю сообщение, это делается из rootScope, поэтому ng-click ссылается на него. Изменение моей функции ng-click с $scope.myFunc= на $rootScope.myFunc=, похоже, сработало. - person Cameron Ball; 04.12.2014
comment
некоторые обновления здесь. Установите для области действия значение false в директиве. - person Mikalai; 04.12.2014