2014-10-07 11 views
13

próbuję to zrobić:Jak mogę usunąć wszystkie spacje tekstowe w powiązaniu AngularJS?

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

ale jej nie działa. "mystring" to obiekt na $scope z ciągiem takim jak "mój ciąg to jest" ze spacjami, które chcę usunąć z widoku.

+0

[Wyrażenia kątowe] (https://docs.angularjs.org/guide/expression) nie są po prostu javascript. Nie można więc zakładać, że wszystko, co działałoby w kontekście wykonywania javascript, będzie działało również jako wyraz kanciasty. – Yoshi

Odpowiedz

37

Wystarczy utworzyć specjalny filtr:

angular.module('filters.stringUtils', []) 

.filter('removeSpaces', [function() { 
    return function(string) { 
     if (!angular.isString(string)) { 
      return string; 
     } 
     return string.replace(/[\s]/g, ''); 
    }; 
}]) 

i nazywają to lubią:

<div id="{{'hi there'| removeSpaces}}"></div> 
+0

hi Cétia, działa dobrze, gdy dostałem dane i wyświetlić na polu wprowadzania (w czasie edycji profilu). Ale za pomocą tego pola rozwiązania nie można zapisywać. Proszę zaproponować rozwiązanie z zapisywalnym polem wprowadzania danych. Dzięki. –

2

można zamienić wszystkie spacje pustymi za pomocą replace():

.replace(" ","") 
+4

To wydaje się zastępować tylko pierwsze miejsce. – zochhuana

+1

Szukałeś '.replace (//g, '')' – taystack

20

jeśli po prostu potrzebujesz go w jednym lub dwóch miejscach, łatwiej podzielić i dołączyć:

$scope.boundString = 'this is a string with spaces' 

z tym można zrobić w szablonie:

<span>my string is: {{ boundString.split(' ').join('') }}</span> 

i co można uzyskać:

my string is: thisisastringwithoutspaces 

inne podejście, które zostało wymienione jest wersja regex ('g' jest dla globalnego):

<span>my string is: {{ boundString.replace(/ /g, '') }}</span> 

Chyba punkt i s, że możesz zrobić, co chcesz, do ciągu znaków w wyrażeniu. Te przykłady są złą konwencją w odniesieniu do kątowego sprawdzania brudu. W Angularie funkcje bound (string.replace, string.split) otrzymują ocenę przeciwną do określonej wartości (string, boolean) po związaniu z wyrażeniem szablonu. Wynik funkcji związanej musi zostać oceniony zanim Angular wie, czy zaktualizować DOM. Może to być kosztowne w przypadku dużej aplikacji. Proponuję przy użyciu innej zmiennej do śledzenia wartości un rozstawione:

$scope.noSpaces = $scope.boundString.replace(/ /g, ''); 

HTML:

<span>{{ noSpaces }}</span> 

W ten sposób, gdy pętla strawienia jest wyzwalany, kątowe sprawdzi, czy noSpaces zmieniła się, w przeciwieństwie do oceniając boundString.replace (//g, '').

Co jeśli powtórzysz? Dobre pytanie.

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

Jak o {{ string.trim() }}?

Source

+0

Spowoduje to usunięcie spacji od początku i od końca 'string'. –

6

dyrektywą wymienioną działa całkiem dobrze. Ale jeśli chcesz usunąć spacje dla mniejszych tekstów, można użyć

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

Zastępuje kompletne przestrzenie w przeciwieństwie .replace(" ","") który zastępuje tylko pierwszego miejsca.

+0

Czyste, ładne i łatwe! Dziękuję Ci! –

0

Można to zrobić za pomocą replace():

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

to wszystko mam nadzieję, że tak.

Powiązane problemy