【发布时间】:2016-06-10 21:16:31
【问题描述】:
我的问题似乎与ng-click not working in dynamically created content 比较相似,但那里发布的解决方案对我不起作用。
整个目标是有一个指令,该指令将基于控制器范围内的变量生成一些 html。生成的 html 将替换所有 ${foobar} 为一个可点击的跨度,其文本是 foobar ,点击时将在控制器的范围内执行一个函数。
我有一个指令:
.directive('markup', function($compile) {
var convertParameters = function(text) {
var matches = text.match(/\${.*}/);
if(!matches) {
return text;
}
for(var i=0;i<matches.length;++i) {
var match = matches[i];
var label = match.substring(2,match.length-1)
text = text.split(match).join('<span ng-click="expose(\'' + label + '\')">' + label + '</span>');
}
return text;
}
var link = function(scope, element, attrs) {
var text;
if (scope.markup) {
text = scope.markup;
} else {
text = element.text();
}
element.html("");
element.append($compile(convertParameters(text))(scope));
};
return {
restrict: 'A',
scope: {
markup: '=',
expose: '&'
},
replace: true,
link: link
};
});
该指令在 html 中用作:
<div class="full-text" markup="fullText" expose="exposeDoc"></div>
fullText = "这是初始测试。我们在这里有一个链接:${TestDocument}。"
exposeDoc 在控制器的作用域上定义为:
$scope.exposeDoc = function(name) {
$log.error(name);
};
一切都正确呈现,但是当我喜欢 TestDocument 文本时,什么都没有发生。即使我希望记录的错误也不会发生。检查元素会显示 ng-click 属性。
这是一个显示问题的 plunker:http://plnkr.co/edit/UFjM8evq43pdm69shQWn?p=preview
任何可以提供的帮助将不胜感激!
【问题讨论】:
-
在将内容附加到元素后,您是否尝试过执行 $compile? $编译(元素)
-
是的,我试过了,但不幸的是,当我这样做时,文本根本没有被渲染。
标签: javascript jquery html angularjs