我正在编写一个需要模板的Angular指令。在Angular中加载模板是通过使用<script type="text/ng-template">
将模板本身嵌入到源代码中,或者通过在指令的配置中提供URL来完成的,例如templateUrl: "/path/to/template.html"
。
第一种方式对于第三方指令是完全不可接受的,因为人们不会npm install
我的指令然后执行include("node_modules/mydirective/template.html")
(或等效的),它只是感觉很脏。
第二种方式不会出于同样的原因。该模板将位于node_modules
目录内,在打包/部署网站后,该目录无法公开访问。
我的想法是允许开发人员以与指令本身相同的方式包含模板:
<script type="text/javascript" src="/path/to/directive.js"></script>
<script type="text/ng-template" src="/path/to/directive.html"></script>
问题是第二行不起作用(浏览器会抱怨意外的字符,我假设因为它仍然试图将获取的内容解析为JS。
我发现使用ng-include
代替script src
实际上会抓取模板。问题是,在获取模板时,我的指令已经运行link
函数并崩溃(因为它找不到模板)。
有没有办法可以延迟我的指令,直到获取模板或提供加载模板的任何理智的方式?
答案 0 :(得分:0)
使用模板而不是templateUrl进行内联模板怎么样?如果它是一个库,我觉得这是捆绑指令和模板以进行分发的最简单方法
答案 1 :(得分:0)
延迟评估指令的一种方法是编写一个包装指令来执行模板请求,然后$ compile并将初始指令附加到请求回调中的页面。不过,还不是那么漂亮。