首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AngularJs中ng-bind中的转义&>字符

AngularJs中ng-bind中的转义&>字符
EN

Stack Overflow用户
提问于 2013-10-09 14:21:52
回答 4查看 28K关注 0票数 18

我有一个用例,我们可以在字符串中包含'&‘和'>’字符。例如:强生,value > 3。因此,当来自服务器的响应被编码时,值就变成了'value > 3‘。

ng-bind不支持以下内容:

将为ngBind呈现value > 3,而浏览器呈现与value > 3相同的内容。

http://jsfiddle.net/HKahG/2/

代码语言:javascript
复制
Ng:bind <div ng-bind="model"></div> 
Ng:bind-html <div ng-bind-html="model"></div>
<div> From Div: value &gt; </div>

为什么ng-bind中不存在此默认浏览器行为?我不想使用ng-bind-html (值为<有问题,而且它不是html)或ng-bind-unsafe-html

我的应用程序有动态键值字段,它们将显示在应用程序的不同部分。因此,与使用ngBind相比,使用单独的指令或装饰器来显示所有字符串字段需要额外的开销。

问题:

1)有没有其他方法可以在不使用额外指令的情况下执行相同的操作,或者这是处理编码数据的正确方法吗?

2)默认情况下,是否可以覆盖或修饰ng-bind的行为?

EN

回答 4

Stack Overflow用户

发布于 2013-10-16 22:20:37

ng-bind使用.text()方法替换文本,虽然您的代码包含&gt;,但ng-bind不能正确呈现它。您应该在此位置使用ng-bind-html,因为您实际上是在输入HTML内容。否则,您可以将>替换为正则表达式为'>‘。

例如:- model = model.replace(/&gt;/g, '>');

但是在这种情况下,您必须替换所有不需要的HTML标记,因为ng-bind-html在您的情况下已经可以很好地工作了。

票数 6
EN

Stack Overflow用户

发布于 2013-10-09 15:56:13

是的,让我们用一个过滤器来“装饰”它:

代码语言:javascript
复制
.filter("decode",function(){
    return function(str){         
      var el = document.createElement("div");
      el.innerHTML = str;
      str =   el.textContent || el.innerText;
      return str;        
    }
});

并像这样使用它:<div ng-bind="model|decode"></div>

工作示例:http://jsfiddle.net/HKahG/5/

灵感来自于这个答案:https://stackoverflow.com/a/784698/1206613

票数 5
EN

Stack Overflow用户

发布于 2013-10-14 19:10:10

我记得有一个名为ngBindHtmlUnsafe的指令可用于此类用例。

http://code.angularjs.org/1.0.8/docs/api/ng.directive:ngBindHtmlUnsafe

请参考这个。不确定这在以后的不稳定版本中是否可用。此链接指向可用的最新稳定版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19264586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档