ng-repeat中的Angular外部模板指令

时间:2014-12-11 18:25:40

标签: angularjs angularjs-directive angularjs-ng-repeat ng-repeat

我这里有html块,比如:<div>{{myVar}}</div>。这段代码在很多地方都有很多页面。设计师不时决定随机改变块看起来的方式和它包含的内容,所以我必须在每个地方的每个页面重做代码块 - &gt; BAD!

解决方案是将该代码块放在指令中并仅在一个地方修改它。现在说代码块是非常复杂的标记,所以我倾向于将它放在一个单独的页面中并进行templateURL引用(为了便于编辑),但缺点是在每个地方,指令将位于ng-repeat中,并且我不确定当每次运行到该指令时,angular是否会对该指令所在的单独页面发出HTTP请求。

因此,我的问题是:

1)Angular每次遇到该指令时都会做一个http请求吗? - 如果有的话可以选择不发生吗?

2)如果我把它放在一个单独的页面中,我还会遇到哪些其他缺点?

3)将指令放在单独的文件中的经验法则是什么。

4)你什么时候知道你是否过度反应&#34;你的加价?

2 个答案:

答案 0 :(得分:1)

Angular将模板提取一次并保留在缓存中并从那里提供服务。 所以只有一个http电话。

所以,如果你不想避免它,你将不得不使用一个字符串。

你可以在这里做些更好的事情。 Spicify指令中的虚拟URL。并在某处创建模板字符串。

在module.run中注入$ templatecache服务并调用:

$templatecache.put('url',templateString);

现在你的指令将从URL中读取它的行为。但实际上你是在模块级别指定字符串。

&#34;这样您就可以在一个地方指定所有模板字符串。无需使用指令。&#34;

答案 1 :(得分:0)

  1. 没有。它获取模板一次,将其放入缓存中,并从缓存中获取该指令的所有后续出现。当然,如果重新加载应用程序(即刷新页面,模板将被重新加载。但即便如此,除非您明确禁止它,否则浏览器应将其放在自己的缓存中。

  2. 我没有看到任何。

  3. 我通常在模板太大而无法轻松放入JS字符串文字时执行此操作。请注意,如果您真的不想要额外的HTTP请求来加载其模板,您也可以将其放在单独的文件中,但在构建时将其嵌入到JavaScript代码中。