Smarty PHP与AngularJS发生冲突

时间:2012-10-05 00:42:41

标签: php javascript smarty angularjs template-engine

当我在同一模板中使用AngularJS时,如何阻止Smarty抛出错误。我有一个包含此代码的Smarty页面模板:

 <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

如果我将 {{i}} 替换为 {{4}} 或任何其他数字,则可以正常使用。我也可以使用数学,{{8 + 2}}将在页面中显示10。这是Smarty做angularJS的数学吗?

3 个答案:

答案 0 :(得分:20)

更清洁的解决方案:您可以通过以下方式更改AngularJS的模板分隔符:

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

答案 1 :(得分:16)

试试这个:

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

来自Smarty网站的报道......

  

{literal}标签允许从字面上获取数据块。这是   通常用于Javascript或样式表块,其中{curly   大括号}会干扰模板分隔符语法。什么   在{literal} {/ literal}标签内不会被解释,而是显示   原样。

答案 2 :(得分:4)

您可以将Angular配置为使用{{}}以外的插值符号:https://stackoverflow.com/a/11108407/215945