Я угловатый новичок, и я изучаю книгу "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
, из коробки? Что мне не хватает?
благодаря
$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) ;
}
});
ReferenceError: $sce is not defined
, что является нормальным. Я мог бы поместить фильтр в контроллер, но это вызовет больше шума, плюс я думаю, что фильтр в представлении намного лучше и более логичен, разделяя задачи. Я все еще работаю над этим. Есть идеи?
Попробуйте добавить это перед сращиванием
str.toString();
str.splice(//pass parameters);
console.log(str)
и / илиconsole.log(typeof str)
чтобы увидеть, является ли строка ожидаемойtypeof
- это «объект», аstr
- строка, в которой только последний период заменен на</br></br>
. Но я все еще ничего не вижу на странице