我有一个满意的输入。
<div contenteditable input-container></div>
外部事件可能会将html内容添加到contenteditable中。它可以是普通的html文本,也可以是带有指令的html。所以例如我可能会以
结束<div contenteditable input-container>
<some-directive></some-directive>
</div>
因此,当可信内容发生变化时,我需要重新编译。我这样做是这样的:
module.directive('inputContainer', ['$compile', function($compile) {
return {
restrict: "A",
link: function(scope, element) {
element.on('change', function(){
console.log("Compile main input content");
$compile(element.html())(scope);
});
}
};
}]);
假设内部指令是这样的:
module.directive('someDirective', function() {
return {
restrict: "E",
template: "<span>***test***</span>",
replace: true,
scope: {
item: "="
},
link: function(scope, element) {
console.log(element.html());
}
};
});
问题是所有似乎运行良好,没有错误,控制台日志是他们预期的位置,但页面没有更新,也没有显示预期的
***test***
我做错了吗?
答案 0 :(得分:1)
好的,错误就在这里
$compile(element.html())(scope);
$compile
期望DOM元素,而不是html文本。所以用下面的固定替换
$compile(element.contents())(scope);