无法使用角度过滤器

时间:2015-08-19 11:06:03

标签: angularjs angularjs-filter

我是一个有角度的新手,我通过实例研究了这本书" Angular JS"我尝试创建自己的过滤器。 (第93-94页)。

在我的控制器中,这是我想要操作的字符串 procedure: "Assume a position, with feet together .\Slightly bend your knees, .\While in air, bring your legs out .\ As you are moving your legs outward"

然后我消毒它

$scope.trustedHtml = $sce.trustAsHtml($scope.currentExercise.details.procedure);

由于这是SPA,因此过滤器位于description-panel.ejs文件中,位于workout.ejs内,位于index.ejs

description-panel.ejs

<div class="panel-body" ng-bind-html ="trustedHtml | myLineBreakFilter"> </div>

workout.ejs

<div id="video-panel" class="col-sm-3" ng-include="'description-panel.ejs'">

index.ejs

<script src="/javascripts/7MinWorkout/filters.js"></script>

filter.js有过滤器

angular.module('7minWorkout').filter('myLineBreakFilter', function () {
    return function (input) {
        var str = input;
        var br = "</br></br>";
        var position = str.indexOf(".");

        var output = [str.slice(0, position), br, str.slice(position)].join('');    

        return output ; 
    }
});

过滤器应将所有.替换为</br></br>

这不起作用,我的前端根本没有任何文字。我在控制台中收到此错误

TypeError: str.slice is not a function  at filters.js:22

不应该支持像str.slice那样的基本js东西吗?我错过了什么?

由于

2 个答案:

答案 0 :(得分:1)

$sce.trustAsHtml()会返回一个对象,因此切片将无效。您可以将该对象传递给$sce.getTrustedHtml(object)以获取原始值,然后可以对其应用切片。

    angular.module('7minWorkout').filter('myLineBreakFilter', function ($sce) {
return function (input) {

var str = $sce.getTrustedHtml(input);
var br = "</br></br>";
var position = str.indexOf(".");

var output = [str.slice(0, position), br, str.slice(position)].join('');    

return $sce.trustAsHtml(output) ; 
}
});

答案 1 :(得分:0)

尝试在拼接之前添加此内容

str.toString();
str.splice(//pass parameters);