【问题标题】:Replace text with html tag in filter用过滤器中的html标签替换文本
【发布时间】:2014-11-13 11:48:35
【问题描述】:

在我的表单正文中,我有这个(示例):

<div class="a" ng-repeat="q in question">{{q.Type}}</div>

结果将是:.

<div class="a ng-scope" ng-repeat="q in question">2</div>

question 包含用户的问题,以及消息类型中的 Type,如“System”、“Modules”等。

所以值是:

1:系统,

2:模块,

3: ...

这里是主题问题:

我想将 Type 更改为 image 。意思是我想用 tag 替换 {{q.Type}} 中的类型。所以我尝试使用过滤器并将我的代码更改为:

<div class="a" ng-repeat="q in question">{{q.Type | imgReplace}}</div>

我写了我的过滤器,然后在过滤器中我有这样的东西:

if (input == 2) {
     return "<img src='img.jpg' />";

但结果是:

<div class="a ng-scope" ng-repeat="q in question"><img src="modules.jpg" /></div>

这种情况我能做些什么。它不呈现 html 标签并呈现纯文本。

谢谢。

【问题讨论】:

    标签: html angularjs filter


    【解决方案1】:

    最好使用ng-class

    HTML:

    <div class="a" ng-repeat="q in question" ng-class="marker(q.Type)">{{q.Type}}</div>
    

    控制器:

    $scope.marker = function(val) {
    
        switch (val) {
            case "1":
                return "class1";
    
            case "2":
                return "class2";
    
        }
    
    }
    

    并将background-image 设置为class1 或class2

    【讨论】:

    • 哦!你的权利 。我可以使用 text-indent 隐藏文本,并在我想要的时候使用 switch 中的默认选项来显示。好东西 。谢谢。
    【解决方案2】:

    也许你在这之后:

    ng-bind-html="trustedHtml"
    

    在这个 div:

    <div class="a" ng-bind-html="trustedHtml" ng-repeat="q in question"></div>
    

    在你的控制器/指令中你可以添加这个:

    $scope.html = "<img src='img.jpg' />";
    $scope.trustedHtml = $sce.trustAsHtml($scope.html);
    

    我在这里的意思是你需要在你的控制器中使用$sce 来告诉 Angular 这个 img 来自受信任的来源,所以把它当作一个标记而不是一个字符串,这样你就可以根据需要使用你的过滤器。

    Plunkr

    【讨论】:

    • 我想你误解了我的意思。有不同的数据。它的 1 、 2 、 3 或 4 。并且每条记录的值都不相同。我必须为不同的 img src 在这些值之间进行切换。
    • @Dr.Bronx 我刚刚用 plunkr 更新了答案,你可以明白我的意思,$sce 应该用于告诉 Angular 将即将到来的标记视为标记而不是字符串。
    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2011-03-13
    • 2016-08-29
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多