не может манипулировать строкой с угловым фильтром

0

Я угловатый новичок, и я изучаю книгу "Angular JS by example", и я пытаюсь создать свой собственный фильтр. (стр. 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- str.slice подобные str.slice, из коробки? Что мне не хватает?

благодаря

  • 0
    Попробуйте и console.log(str) и / или console.log(typeof str) чтобы увидеть, является ли строка ожидаемой
  • 0
    @Fissio typeof - это «объект», а str - строка, в которой только последний период заменен на </br></br> . Но я все еще ничего не вижу на странице
Теги:
angularjs-filter

2 ответа

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) ; 
}
});
  • 0
    У меня нет яичек, но это должно работать.
  • 0
    Хорошая идея, но нет, это не работает, я получаю ReferenceError: $sce is not defined , что является нормальным. Я мог бы поместить фильтр в контроллер, но это вызовет больше шума, плюс я думаю, что фильтр в представлении намного лучше и более логичен, разделяя задачи. Я все еще работаю над этим. Есть идеи?
Показать ещё 7 комментариев
0

Попробуйте добавить это перед сращиванием

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню