【问题标题】:Smarty PHP clashing with AngularJSSmarty PHP 与 AngularJS 发生冲突
【发布时间】:2012-09-26 02:57:49
【问题描述】:

当我在同一个模板中使用 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 的数学运算吗?

【问题讨论】:

    标签: php javascript smarty angularjs template-engine


    【解决方案1】:

    试试这个:

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

    引用自 Smarty 网站...

    {literal} 标签允许按字面意思获取数据块。这是 通常用于 Javascript 或样式表块,其中 {curly 大括号} 会干扰模板分隔符语法。任何事物 在 {literal}{/literal} 标记内不会被解释,但会显示 原样。

    【讨论】:

    • 当然!我是模板引擎的新手,而且现在是凌晨 2 点,但显而易见的答案是避开括号。非常感谢
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      更简洁的解决方案:您可以这样更改 AngularJS 的模板分隔符:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-26
        • 1970-01-01
        • 2014-11-16
        • 2016-03-10
        • 2017-06-24
        • 2015-10-04
        • 2014-01-30
        • 1970-01-01
        相关资源
        最近更新 更多