在指令定义中使用$compile的意义是什么?

What is the significance of using $compile in directive definition?

本文关键字:是什么 compile 定义 指令      更新时间:2023-09-26

下面的代码与egghead提供的代码类似。他正在构建一个调试指令。

app.directive('debug',function($compile){// injecting compiler
    return{ // DDO
        terminal:true,
        priority:1000,
        link:function($scope,$element){
            var clone = $element.clone();
            clone.removeAttr("debug");
            $element.addClass('highlight');
            var clonedElement = $compile(clone)($scope);
            $element.after(clonedElement);
        }
    };
});

我的问题是,从$compilecompile,再到clone,再到DOM中添加clonedElement,这有什么意义?我试图添加(下面给出的代码)clone而不是clonedElement,它显然做同样的事情。

app.directive('debug',function($compile){// injecting compiler
    return{ // DDO
        terminal:true,
        priority:1000,
        link:function($scope,$element){
            var clone = $element.clone();
            clone.removeAttr("debug");
            $element.addClass('highlight');
            //var clonedElement = $compile(clone)($scope);
            $element.after(clone);
        }
    };
});

在这个有限的例子中,这可能无关紧要,但不同之处在于Angular没有考虑那个DOM元素。如果DOM元素有指令或绑定,它们将无法工作,因为Angular还没有意识到该元素。$compile是将一个新的DOM元素与Angular关联起来的。

对于不熟悉的api,请务必阅读文档