我一起使用角度js和freemarker,在模板中我写了一个<a>
标签href
attr以#
开头,所以我可以配置角度路由,例如:< / p>
<a href="#/edit/user">
但是在使用angularJS模板编写模板时,似乎存在一些冲突(将freemarker语法和angularJS模板语法结合在一起):
<li ng-repeat="tab in tabs">
<a href="#{{tab.url}}"> {{tab.title}} </a>
</li>
如果我上面写的那样,freemarker模板将无法解析此异常:
freemarker.core.ParseException: Parsing error in template "mis/newindex.ftl" in line 21, column 80:
Encountered "}", but was expecting one of:
","
":"
"."
"["
"("
"?"
"!"
<TERMINATING_EXCLAM>
"??"
"+"
"-"
"*"
"/"
"%"
"!="
"="
"=="
">="
<ESCAPED_GTE>
">"
<ESCAPED_GT>
<LESS_THAN_EQUALS>
<LESS_THAN>
".."
<AND>
<OR>
我知道#{{tab.url}}
应该是造成问题的原因之一,但我怎么能绕过这个问题呢?
我通过在角度控制器中添加一个方法来构建带有#
前缀的网址
function completeUrl(url){
return '#' + url;
}
<a href={{completeUrl(tab.url)}}> {{tab.title}} </a>
但是,我想找到一个更优雅的解决方案。
答案 0 :(得分:2)
更新:自FreeMarker 2.3.28起,您可以将FreeMarker配置为仅使用${...}
,而不是#{...}
,方法是将interpolation_syntax
配置设置为{{ 1}}(在Java API中:dollar
)。然后Configuration cfg; ... cfg.setInterpolationSyntax(Configuration.DOLLAR_INTERPOLATION_SYNTAX)
只是FreeMarker的静态文本。请勿将此设置与#{...}
设置混淆。顺便说一句,也可以使用tag_syntax
作为插值语法,以防[=...]
也与某些东西发生冲突(比如ES6字符串插值)。另见:https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html
这与FreeMarker的${...}
发生了不幸的冲突,它甚至已被弃用,只是为了向后兼容性而被识别,但解析器无法配置为忽略它。我能想到的最短(即使是丑陋)的解决方案是#{}
。
答案 1 :(得分:0)
如果您的问题符合perl -MXML::LibXML -E 'say $_->to_literal for XML::LibXML->load_xml(location=>q{file.xml})->findnodes(q{/root/item/mediaList/media/URL})'
值,则可以使用href
指令解决此问题。
代码应该是:
ngHref