我是一个有角度的新手,我通过实例研究了这本书" 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东西吗?我错过了什么?
由于
答案 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);