2012-10-05 46 views
9

当我在同一个模板中使用AngularJS时,如何阻止Smarty抛出错误。我有这个代码Smarty的页面模板:Smarty PHP与AngularJS冲突

<li ng-repeat="i in items"> 
     <p class="item">{{i}}</p> 
</li> 

而且我得到一个空白页,当我在浏览器中查看。我得到一个很大的错误在我的Apache的error_log,其中包含以下内容:

PHP Fatal error: Uncaught exception 'SmartyCompilerException' with message 'Syntax Error in template ... <p>{{i}}</p>; unknown tag "i 

如果我换{{我}}{{4}}或正常工作的任何其他数字。我也可以使用数学,{{8 + 2}}将在页面中显示10。 Smarty是否在执行angularJS的数学计算?

回答

16

试试这个:从Smarty的网站

<li ng-repeat="i in items"> 
    <p class="item">{literal}{{i}}{/literal}</p> 
</li> 

报价...

{}文字标签允许数据块从字面上理解。这通常用于围绕Javascript或样式表块的 ,其中{curly 大括号}会干扰模板分隔符语法。 {literal} {/ literal}标签中的任何 都不会被解释,但会按原样显示 。

+3

嘿,那还有简洁;) –

+0

当然!我是模板引擎的新手,加上是凌晨2点,但显而易见的答案是跳过括号。谢谢一堆 –

20

更清洁的解决方案:你可以改变AngularJS正是如此的模板分隔符:

angular.module('app', []) 
    .config(['$interpolateProvider', function ($interpolateProvider) { 
    $interpolateProvider.startSymbol('[['); 
    $interpolateProvider.endSymbol(']]'); 
    }]);