2013-07-03 12 views
41

Chciałem wiedzieć, czy mogę podzielić ciąg po prostu w angularJS. MamJak podzielić ciąg z angularJS

$scope.test = "test1,test2"; 

w moim kontrolera i moim zdaniem chciałem zrobić coś takiego

{{test[0] | split(',')}} 
{{test[1] | split(',')}} 

ja widziałem wiele rzeczy na temat wejścia i NG-zmiany wywołanie funkcji w kontrolerze, który podzielił ciąg znaków lub coś z ng-list, ale nic nie działa w moim przypadku.

thx dla wszystkich.

+0

co powinno być wyrażeniem wyjściowym '{{}}' w wyniku podziału? '{{}}' wyrażenia są traktowane jako łańcuchy, podczas gdy zgaduję, że chcesz 'split' zwrócić tablicę. – Raibaz

+2

Czy nie możesz użyć zwykłego kodu JavaScript, aby podzielić ciąg? http://www.w3schools.com/jsref/jsref_split.asp –

+0

[lepszy artykuł na temat String.split] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split), przepraszam Lukas. – rlemon

Odpowiedz

79

Możesz owinąć tę funkcjonalność do filtra, w ten sposób nie musisz umieszczać funkcji mySplit we wszystkich kontrolerach. Na przykład

angular.module('myModule', []) 
    .filter('split', function() { 
     return function(input, splitChar, splitIndex) { 
      // do some bounds checking here to ensure it has that index 
      return input.split(splitChar)[splitIndex]; 
     } 
    }); 

stąd, można użyć filtru, jak pierwotnie przeznaczone

{{test | split:',':0}} 
{{test | split:',':0}} 

Więcej informacji na http://docs.angularjs.org/guide/filter (dzięki Ross)

Plunkr @http://plnkr.co/edit/NA4UeL

+7

Argumenty należy przekazać ":" - rozdzielone : '{{wyrażenie | filter: argument1: argument2: ...}} ", więc w tym przypadku:' {{test | split: ",": 0}} '. [New docs] (http://docs.angularjs.org/guide/filter). Zgaduję, że to się zmieniło w ciągu ostatnich 6 miesięcy. – ross

+0

Czy ktoś może powiedzieć, czy to działa również dla tablic? –

42

Thx guys, I w końcu znaleźć rozwiązanie, naprawdę podstawową .. W moim kontroler mam

$scope.mySplit = function(string, nb) { 
    var array = string.split(','); 
    return array[nb]; 
} 

i moim zdaniem

{{mySplit(string,0)}} 
+3

Gratulujemy znalezienia rozwiązania samemu. Powinieneś rozważyć przyjęcie własnej odpowiedzi. – Sprottenwels

+6

lepiej byłoby to zrobić, tworząc niestandardowy filtr - https://docs.angularjs.org/guide/filter – Larry

+0

Lepiej użyć filtru, jak w powyższej odpowiedzi – hakazvaka

25

Można spróbować coś takiego:

$scope.test = "test1,test2"; 
{{test.split(',')[0]}} 

teraz dostaniesz "test1" podczas próby {{test.split(',')[0]}}

a dostaniesz "test2" podczas próby {{test.split(',')[1]}}

tutaj jest mój plnkr:

http://plnkr.co/edit/jaXOrZX9UO9kmdRMImdN?p=preview

+1

To całkiem jasne veljasije. Zamiast używać dyrektywy lub funkcji użył metody split dla obiektu typu string bezpośrednio w widoku. POCAŁUNEK. – KeizerBridge

+0

@veljasije po prostu idź i link, zrobiłem to wyraźnie na plunkr http://plnkr.co/edit/jaXOrZX9UO9kmdRMImdN?p=preview –

+0

dokładnie @KeizerBridge, dzięki za twoje uznanie ... :-) –

0

Możesz spróbować:

$scope.testdata = [{ 'name': 'name,id' }, {'name':'someName,someId'}] 
$scope.array= []; 
angular.forEach($scope.testdata, function (value, key) { 
    $scope.array.push({ 'name': value.name.split(',')[0], 'id': value.name.split(',')[1] }); 
}); 
console.log($scope.array) 

W ten sposób można zapisać dane w celu późniejszego wykorzystania i acces go przy użyciu NG-powtarzać tak:

<div ng-repeat="item in array">{{item.name}}{{item.id}}</div> 


Mam nadzieję, że to pomogło komuś,
Plunker link: here
wszystkie kredyty przejdź do @jwpfox i @Mohideen ibn Mohammed z powyższej odpowiedzi.