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);
}
};
});
К сожалению, это создает ошибку "txt.replace не является функцией". Кстати: я включил компиляцию $ в объявлении основной функции директив, чтобы получить компиляцию $, чтобы работать. – Andbil
@Andbil, используйте 'compile' после цикла – Grundy
Я включил компиляцию после цикла следующим образом: txt = $ compile (txt); Это, похоже, выводит код функции ссылки, начинающийся с «function publicLinkFn ...» – Andbil