1

Я новичок в Angularjs и пытаюсь создать директиву по словарю, которая выполняет поиск и заменяет тексты на якорные метки. Функция поиска и замены работает нормально, но я не могу заставить ng-click работать.

HTML
Директива Angularjs с ng-click

<div mk-dct>Lorem ipsum [dolor] sit [amet]</div> 

Угловая

app.directive('mkDct', function() { 
var pattern = /\[([^\]]+)\]/g; 
return { 
    restrict: 'A', 
    link: function(scope, element, attrs) { 
     var txt = element.html(); 
     var m = txt.match(pattern); 

     for(var i = 0; i < m.length; i++){ 
      var word = m[i].substring(1, m[i].length-1); 
      txt = txt.replace(m[i], '<a class="dict-item" ng-click="func(\''+word+'\')" href="#">'+ word + '</a>'); 
     } 

     element.html(txt); 
    } 
}; 

UPDATE
комментируемого линии ниже заставили его работать, как ожидалось.

app.directive('mkDct', function ($compile) { 
var pattern = /\[([^\]]+)\]/g; 
return { 
    restrict: 'A', 
    scope: true, 
    link: function(scope, element, attrs) { 
     var txt = element.html(); 
     var m = txt.match(pattern); 

     for(var i = 0; i < m.length; i++){ 
      var word = m[i].substring(1, m[i].length-1); 
      txt = txt.replace(m[i], '<a class="dict-item" ng-click="func(\''+word+'\')" href="#">'+ word + '</a>'); 
     } 

     // Compile to template. 
     txt = $compile(txt)(scope); 

     // Clear and append. 
     element.empty().append(txt); 
    } 
}; 

});

ответ

1

Вам необходимо, чтобы compile ваш элемент.

EDIT Добавить компиляцию после цикла, как описано в комментариях ниже.

txt = $compile(txt)(scope); 
+1

К сожалению, это создает ошибку "txt.replace не является функцией". Кстати: я включил компиляцию $ в объявлении основной функции директив, чтобы получить компиляцию $, чтобы работать. – Andbil

+1

@Andbil, используйте 'compile' после цикла – Grundy

+0

Я включил компиляцию после цикла следующим образом: txt = $ compile (txt); Это, похоже, выводит код функции ссылки, начинающийся с «function publicLinkFn ...» – Andbil