【问题标题】:Angular $sce.trustAsHtml filters out PHP codeAngular $sce.trustAsHtml 过滤掉 PHP 代码
【发布时间】:2014-07-20 13:37:23
【问题描述】:

我正在尝试使用 $sce.trustAsHtml 作为过滤器复制 ng-bind-html-unsafe,如给定 here

当我尝试传递如下文本时:

"Code: <?php echo strtotime($user->created_at)*1000; ?>"

它被渲染为:

"Code: created_at)*1000; ?>"

如何渲染整个文本?

更新:

我的代码如下:

HTML:

<p ng-bind-html="message.messagebody | newlines | unsafe"></p>

过滤器:

app.filter('newlines', function () {
  return function (text) {
    return text.replace(/\n/g, '<br/>');
  }
})

app.filter('unsafe', ['$sce',
  function ($sce) {
    return function (val) {
      return $sce.trustAsHtml(val);
    }
  }
])

我正在使用 ng-bind-html,因此每当输入新行时,它都会转换为“
”标签,并在浏览器中呈现时显示为新行。

【问题讨论】:

  • 为什么要使用 trustAsHtml?如果你只是按原样过去会发生什么?
  • &lt; 不是有效的 html,请尝试转换为 htmlentities 或创建自己的指令来设置 html,这样它就不会通过$sce运行跨度>
  • 当用户输入换行符时,需要将其转换为
    标签,以便在浏览器中呈现时反映换行符。否则它在同一行。这就是我使用 ng-bind-html 而不是 ng-bind 的原因。
  • 老q,你自己解决了吗@Prateek Bhatt?

标签: php angularjs


【解决方案1】:

请看这个fiddle

只需在 html 中使用 angular 变量。

HTML

<div ng-app="app" ng-controller="TestController">
    <h3>Not worked</h13>
    <pre>Code: <?php echo strtotime($user->created_at)*1000; ?></pre>

    <h3>Worked</h3>
    <pre>{{data.html}}</pre>
</div>

JavaScript

var app = angular.module('app', []);
app.controller('TestController', function($scope){
    $scope.data = {};
    $scope.data.html = "Code: <?php echo strtotime($user->created_at)*1000; ?>";
});

【讨论】:

  • 当我使用 ng-bind-html 而不是使用角度变量时,这将不起作用。它会抛出一个错误。
  • 我发布的示例对我有用。所以,不要使用 ng-bind-html。
  • 我知道你的例子有效。但是,我需要将 ng-bind-html 用于不同的目的:将换行符转换为中断标记并将它们呈现为 html。有没有办法让它与 ng-bind-html 一起工作?
猜你喜欢
  • 2011-03-06
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多