Solución:
Simplemente cree un filtro dedicado:
angular.module('filters.stringUtils', [])
.filter('removeSpaces', [function() {
return function(string) {
if (!angular.isString(string)) {
return string;
}
return string.replace(/[s]/g, '');
};
}])
y llámalo como:
<div id="{{'hi there'| removeSpaces}}"></div>
Si simplemente lo necesita en uno o dos lugares, puede ser más fácil dividirlo y unirlo:
$scope.boundString = 'this is a string with spaces'
con eso podrías hacer en tu plantilla:
<span>my string is: {{ boundString.split(' ').join('') }}</span>
y obtendrías:
my string is: thisisastringwithoutspaces
otro enfoque que se ha mencionado es la versión regex (‘g’ es para global):
<span>my string is: {{ boundString.replace(/ /g, '') }}</span>
Supongo que el punto es que puedes hacer lo que quieras con una cadena dentro de una expresión. Estos ejemplos son una mala convención con respecto a la verificación sucia de Angular. En Angular, las funciones vinculadas (string.replace, string.split) se evalúan de manera diferente en oposición a un valor especificado (cadena, booleano) cuando se vinculan a la expresión de una plantilla. El resultado de una función vinculada debe evaluarse antes de que Angular sepa si actualizar o no el DOM. Esto puede resultar costoso en una aplicación de gran tamaño. Sugeriría usar otra variable para rastrear el valor no espaciado:
$scope.noSpaces = $scope.boundString.replace(/ /g, '');
HTML:
<span>{{ noSpaces }}</span>
De esta manera, cuando se activa un bucle de resumen, Angular verificará si noSpaces ha cambiado en lugar de evaluar boundString.replace (/ / g, ”).
¿Qué pasa si estás repitiendo ng? Buena pregunta.
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>
La directiva mencionada funciona bastante bien. Pero si desea eliminar espacios para textos más pequeños, puede usar
.split(" ").join("")
Esto reemplaza los espacios completos a diferencia de .replace(" ","")
que reemplaza solo el primer espacio.