Я пытаюсь сделать это:
<div id="{{mystring.replace(/[\s]/g, \'\')}}"></div>
но не работает. "mystring" - это объект на $scope
с строкой типа "моя строка - это" с пробелами, которые я хочу удалить из представления.
Я пытаюсь сделать это:
<div id="{{mystring.replace(/[\s]/g, \'\')}}"></div>
но не работает. "mystring" - это объект на $scope
с строкой типа "моя строка - это" с пробелами, которые я хочу удалить из представления.
Просто создайте выделенный фильтр:
angular.module('filters.stringUtils', [])
.filter('removeSpaces', [function() {
return function(string) {
if (!angular.isString(string)) {
return string;
}
return string.replace(/[\s]/g, '');
};
}])
и назовите его так:
<div id="{{'hi there'| removeSpaces}}"></div>
Если вам просто нужно его в одном или двух местах, его легче разбить и присоединиться:
$scope.boundString = 'this is a string with spaces'
с тем, что вы могли бы сделать в своем шаблоне:
<span>my string is: {{ boundString.split(' ').join('') }}</span>
и вы получите:
my string is: thisisastringwithoutspaces
Другим подходом, который упоминался, является версия регулярного выражения ('g' для глобального):
<span>my string is: {{ boundString.replace(/ /g, '') }}</span>
Я думаю, дело в том, что вы можете делать все, что хотите, в строке внутри выражения. Эти примеры являются плохим соглашением относительно грязной проверки Angular. В Angular связанные функции (string.replace, string.split) вычисляются по-разному, противоположно заданному значению (string, boolean) при привязке к выражению шаблона. Результат связанной функции должен быть оценен до того, как Angular знает, следует ли обновлять DOM. Это может быть дорогостоящим по сравнению с большим приложением. Я бы предложил использовать другую переменную для отслеживания нераспределенного значения:
$scope.noSpaces = $scope.boundString.replace(/ /g, '');
HTML:
<span>{{ noSpaces }}</span>
Таким образом, когда цикл сбора данных запускается, Angular будет проверять, изменилось ли noSpaces в отличие от оценки boundString.replace(//g, '').
Что делать, если вы повторяете ng? Хороший вопрос.
for (var idx = 0, idx < $scope.boundIterable.length, i++) {
$scope.boundIterable[i].noSpaces = $scope.boundIterable[i].boundString.replace(/ /g, '');
}
HTML:
<ul ng-repeat="iterable in boundIterable">
<li>{{ iterable.noSpaces }}</li>
</ul>
Указанная директива работает очень хорошо. Но если вы хотите удалить пробелы для небольших текстов, вы можете использовать
.split(" ").join("")
Это заменяет полные пробелы в отличие от .replace(" ","")
, который заменяет только первое пространство.
Вы можете заменить все пробелы пустым, используя replace()
:
.replace(" ","")
Как насчет {{ string.trim() }}
?
Вы можете сделать это, используя replace()
:
{{mystring.replace(" ","")}}
что я надеюсь.