2016-01-05 4 views
0

Я пытаюсь прикрепить директиву ngBindHtml в приложении в рамках функции ссылки директивы. Модуль, в котором директива находится впрыскивает ngSanitize, как например:Добавление функции ngBindHtml с использованием .attr в функции ссылок не работает

angular.module('ui.bootstrap.contextMenu', ['ngSanitize']) 
    .directive('contextMenu', cm); 

где cm является функция директивы. Функция ссылка выглядит следующим образом:

var link = function ($scope, element, attrs) { 
     element.on('contextmenu', function (event) { 
      event.stopPropagation(); 
      $scope.$apply(function() { 
       event.preventDefault(); 
       var options = $scope.$eval(attrs.contextMenu); 
       var model = $scope.$eval(attrs.model); 
       if (options instanceof Array) { 
        if (options.length === 0) { 
         return; 
        } 
        renderContextMenu($scope, event, options, model); 
       } else { 
        throw '"' + attrs.contextMenu + '" not an array'; 
       } 
      }); 
     }); 
    }; 

где renderContextMenu эскизы из HTML, который будет прикреплен к телу страницы. В этой функции у меня есть следующие строки кода:

$div.attr('ng-bind-html', text); 
$a.append($div); 

, которые должны производить то, что выглядит как:

<a><div ng-bind-html="the text"></div></a> 

и это делает. Проблема в том, что текст фактически не отображается. У кого-нибудь есть мысли по этому поводу?

+0

вы пытаетесь напрямую манипулировать DOM, это не угловой способ сделать что-то. Это jQuery. То, что вы пытаетесь сделать, должно быть отсортировано с привязкой. Например, создав директиву для малого подмодуля и передав ему текст. – Etse

+0

Этот комментарий я не понимаю. Из документации по директивам: * На высоком уровне директивы - это маркеры в элементе DOM (такие как атрибут, имя элемента, комментарий или класс CSS), которые сообщают компилятору HTML AngularJS ($ compile), чтобы связать указанное поведение с этим DOM (например, через прослушиватели событий) или даже для преобразования элемента DOM и его дочерних элементов. * И в этой [документации] (https://docs.angularjs.org/guide/directive) есть даже раздел под названием ** Создание Директивы, которая манипулирует DOM **. В приведенном выше коде используется jqLite, поставляемый с Угловой структурой. – cirrusio

+0

Я считаю, что это связано с тем, как называется функция связи относительно производства DOM. – cirrusio

ответ

1

Я думаю, что «угловой-y» способ сделать это, чтобы поместить html-код для контекстного меню, которое вы надеетесь связать непосредственно в шаблоне, и просто скрыть/показать его соответствующим образом: только показать его если существует действительное событие contextmenu и имеет options.length> 0.

+0

Мысль об этом, используйте директивы '' ng-if'' и '' ng-repeat''; но это сталкивается с гнездом других вопросов ... Я буду исследовать это дальше. При этом html все равно придется украшать, используя «угловой».element() '', потому что мы должны правильно расположить вещи ... Также запутывается проблема с вложенными областями, поскольку это директива, которая может быть вложена в другую директиву ... – cirrusio

+0

Вздох ... не думайте, что я может обучить рог этому более угловым способом ... предмет вложенной области действительно создает некоторые проблемы ... – cirrusio

+0

, если вам нужна информация между несколькими директивами, либо передайте ее с помощью привязок. Или, если его можно рассматривать как «глобальную» информацию, вы можете сохранить ее в сервисе и просто ввести службу в директивы. Но трудно найти хорошее решение, когда вы только спрашиваете напрямую о том, что вы хотите сделать, а не объяснять проблему, которую хотите решить. – Etse