AngularJS对变更

时间:2016-02-23 14:51:32

标签: javascript angularjs

我有一个满意的输入。

<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***

我做错了吗?

1 个答案:

答案 0 :(得分:1)

好的,错误就在这里

$compile(element.html())(scope);

$compile期望DOM元素,而不是html文本。所以用下面的固定替换

$compile(element.contents())(scope);