AngularJS如何输出纯文本而非HTML

在AngularJS中,通常我们使用双花括号绑定语法来将变量的值渲染到视图中,然而默认情况下,这种方式会将变量中的HTML标签解析并渲染为HTML元素,如果我们想要将变量的值仅以纯文本形式展示,该怎么做呢?

方案一:使用ng-bind指令

ng-bind是AngularJS提供的一个指令,与双花括号绑定语法类似,用于将变量的值渲染到视图中,但与双花括号不同的是,ng-bind会将变量的值作为纯文本插入到DOM元素中,而不会解析其中的HTML标签。

---- -----------------------

上述代码中,myText是一个包含HTML标签的字符串,使用ng-bind指令后,它将被转化为纯文本插入到div元素中。

方案二:使用$filter服务

除了ng-bind指令外,还可以使用$filter服务中的‘linky’过滤器来过滤掉HTML标签。linky过滤器会将输入字符串中的URL链接转换为HTML锚点,而其他内容则原样输出。

---- -------------------- - -------------

上述代码中,myText是一个包含HTML标签和URL链接的字符串,使用ng-bind-html指令并配合‘linky’过滤器后,它将被转化为一段包含链接的纯文本。

方案三:使用原生JavaScript

除了AngularJS提供的解决方案外,我们还可以使用原生JavaScript实现将HTML标签过滤掉的功能。

-------- --------------- -
  --- --- - --- --------------------------------- -------------
  ------ -------------------- -- ---
-

上述代码中,stripHtml函数接收一个包含HTML标签的字符串作为参数,使用DOMParser API将其解析为DOM节点,并将节点的textContent属性返回,这样就得到了不包含HTML标签的纯文本。

总结

以上是在AngularJS中实现输出纯文本而非HTML的几种方法。尽管方案二和方案三都具有普适性,但使用ng-bind指令可以更好地利用AngularJS的特性。无论你选择哪种方式,都应该根据具体情况选择最合适的方案。

参考代码:

--------- -----
----- ---------------
------
  ---------------- ----- ---- ------------
  ------- --------------------------------------------------------------------------------------
-------
----- -----------------------
  ------ ----- -------
  ----
  --------- -------------
  ---- -----------------------
  ----
  --------- ------------ --- ----- ------------
  ---- -------------------- - -------------
  ----
  --------- ----------------
  ------- ----------------- --------
  --------
    ----------------------- ---
      --------------------- ---------------- -
        ------------ - ---------- ----- ---- ------
        ------------- - ------------------ --------------------------- -- ------- -- -- -------------------------------------------------------
        ---------------- - -------------- -
          --- --- - --- --------------------------------- -------------
          ------ -------------------- -- ---
        --
      ---
  ---------
-------
-------

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/25316