从angularjs过滤器输出HTML而不使用ng-bind-html?

时间:2015-08-06 11:34:09

标签: javascript html angularjs angularjs-filter ng-bind-html

确定。我已经用Google搜索了没有运气的可能性。

这是我的情景:

我正在尝试显示一个微调器,用于等待解析的承诺的任何值,但我想使用过滤器来实现这一点,而不使用ng-bind-html指令,因为我的大部分绑定已经完成了花括号表达式语法:{{myvalue}}。我只想在需要此行为的地方添加过滤器。像这样:{{myvalue | waiting}},这样只要myvalue的承诺解决,就可以替换它。

我搜索过并发现没有ng-bing-html指令就无法输出html。但我只是在检查是否有人知道更好的方法来实现这一点,只需将waiting标记放在attribute/filter/css class我需要此行为的地方。

过滤代码:

app.filter('waiting', function(){
    return function(value){
        return '<img src="loading.png"/>';
    }
});

示例HTML:

<div ng-controller='ControllerThatHoldsPromise'> <!-- :) -->
    <span>{{myvalue | waiting}}</span>
</div>

总之,我的目标是输出没有ng-bind-html的html。 感谢

1 个答案:

答案 0 :(得分:1)

所以,这项研究向我证明,你必须绝对使用ng-bind-html指令在Angular中输出html。我真的只想使用一个过滤器来解决问题,只需在等待承诺解析时将html内容分配给控制器变量,但根据@ErikLundgren的建议,我决定使用ng-class实现它的伪元素。

这就是我的解决方案的成果......

控制器:

var app = angular.module('MyApp.controllers', ['ngSanitize']);
app.controller('SnazzyController', ['$scope','$timeout', function($scope,$timeout){

    $scope.new_orders = 0;
    $scope.dataPending = true;

    //simulate a delayed response
    $timeout(
        function(){
                $scope.new_orders = 20;
            }
            $scope.dataPending = false;
        }, 4000);
}]);

CSS:

.result-pending{
    position: relative;
}

.result-pending::before{
    content: "";
    position: absolute;
    z-index: 9999;
    height: 100%;
    width: 100%;
    min-height: 64px;
    min-width: 64px;
    background: #FFF url("/images/lazyLoader2.gif") center no-repeat;
    background-size: contain;
    left: 0;
    top: 0;
}

标记:

<div class="panel panel-primary">
    <div class="panel-heading">Waiting Demo</div>
    <div class="panel-body">
        <div class="data" ng-class="{'result-pending': dataPending}">
            {{new_orders | number:0}}
        </div>
        <div class="title">
            NEW ORDERS
        </div>
    </div>
</div>