You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AngularJS 1.8.3中转义插值标记{{和}}避免执行

解决AngularJS 1.8.3中插值标记{{}}的转义问题

问题背景

需要转义字符串中的{{和}}标记,避免被AngularJS 1.8.3当作插值表达式解析,同时要求最终HTML输出与原输入一致(不带反斜杠)。尝试过以下代码:

var inputString = "{{ code snippet here }}" ; 
inputString = inputString.replace("{{", "\\{\\{").replace("}}","\\}\\}");

但输出渲染为:

\{\{ code snippet here \}\}

且因项目限制无法使用ngNonBindable指令。

解决方案

根据元素类型不同,采用两种转义方式:

1. 普通HTML元素(如div、p)

AngularJS 1.x原生支持用单个反斜杠转义插值标记(\{{}}),渲染后会自动去除反斜杠显示原始{{}}。在JS字符串中需将反斜杠转义为双反斜杠,同时使用全局正则替换确保处理所有匹配项,最后通过innerHTML设置内容让Angular处理转义逻辑:

var nodeValue = "{{ 'sample snippet' }}";
// 全局替换为Angular可识别的转义格式
nodeValue = nodeValue.replace(/{{/g, "\\{{").replace(/}}/g, "\\}}");
// 用innerHTML让Angular解析转义标记
document.getElementById('testdiv').innerHTML = nodeValue;

对应的HTML结构:

<div ng-app>
  <div id="testdiv"></div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.8.3/angular.min.js"></script>
</div>

2. Textarea元素

Textarea内容为纯文本,Angular不会自动解析转义标记,此时使用HTML字符实体替换大括号:

  • 左大括号{对应实体&#123;
  • 右大括号}对应实体&#125;

替换后通过innerHTML设置内容,浏览器会自动将实体解析为原始大括号,同时Angular不会识别为插值标记:

var nodeValue = "{{ 'sample snippet' }}";
// 用HTML实体替换插值标记
nodeValue = nodeValue.replace(/{{/g, "&#123;&#123;").replace(/}}/g, "&#125;&#125;");
// 用innerHTML解析实体
document.getElementById('testtextarea').innerHTML = nodeValue;

对应的HTML结构:

<div ng-app>
  <textarea id="testtextarea" cols="50"></textarea>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.8.3/angular.min.js"></script>
</div>

关键说明

  • 使用全局正则表达式(/{{/g、/}}/g)替换所有出现的插值标记,避免仅替换第一个匹配项。
  • 普通元素依赖Angular的转义逻辑,需用innerHTML而非innerText设置内容;textarea依赖浏览器的实体解析,同样需用innerHTML。

内容的提问来源于stack exchange,提问作者Arshad Rehmani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:25:22