AngularJS - 为什么不替换:true使用templateUrl属性?

时间:2012-07-11 05:31:54

标签: javascript angularjs

我有一个非常简单的指令,我想从单独的HTML文件加载模板。我希望HTML替换指令,因此我将replace: true属性添加到指令中。但是,当我这样做时,模板根本不包括在内。

我已经创建了jsFiddle,您可以在其中看到此内容。如果您使用Firebug或其他东西来检查DOM,您可以看到,当它仅使用template属性时,它会替换元素。如果您取消replace: true,您可以看到templateUrl上的HTML附加到foo元素。但是,只要我将replace: true添加到templateUrl,我在DOM中看到的只是<foo></foo>

有什么理由你不能一起使用这两个属性?我不是一个使用javascript的专家,所以任何关于这里发生的事情的信息都将非常感激。

2 个答案:

答案 0 :(得分:34)

确保templateUrl中html的内容只包含一个根元素。这在replace: false时不是问题,但在replace: true时出现问题,您将看到此控制台错误(使用FireBug):

Error: Template must have exactly one root element.

这是jsFiddle of it not working(带有两个根元素),另一个带有working

答案 1 :(得分:2)

好问题。如果我没弄错的话,你想用“transclude”

http://jsfiddle.net/dandoyon/AsVp8/1/

Transclude允许您将模板与HTML中的模板混合。您可能希望再次浏览文档并查找此选项。

喝彩!