Подтвердить что ты не робот

Как удалить все строковые пространства в привязке AngularJS?

Я пытаюсь сделать это:

<div id="{{mystring.replace(/[\s]/g, \'\')}}"></div>

но не работает. "mystring" - это объект на $scope с строкой типа "моя строка - это" с пробелами, которые я хочу удалить из представления.

4b9b3361

Ответ 1

Просто создайте выделенный фильтр:

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>

Ответ 2

Если вам просто нужно его в одном или двух местах, его легче разбить и присоединиться:

$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>

Ответ 3

Указанная директива работает очень хорошо. Но если вы хотите удалить пробелы для небольших текстов, вы можете использовать

.split(" ").join("")

Это заменяет полные пробелы в отличие от .replace(" ",""), который заменяет только первое пространство.

Ответ 4

Вы можете заменить все пробелы пустым, используя replace():

.replace(" ","")

Ответ 6

Вы можете сделать это, используя replace():

{{mystring.replace(" ","")}}

что я надеюсь.