2016-12-07 3 views
0

JS-Code:Wie teilt man die Daten in AngularJS auf?

$scope.records={"0.19", "C:0.13", "C:0.196|D:0.23"} 
    .filter('filterOutput', function() { 
     return function (input) { 
      if (input.indexOf(":") != -1) { 
       var out = input 
        .split('|') 
        .map(function (v) { 
         var s = v.split(':') 
         return s[0] + ':' + (Number(s[1]) * 100) + "%" 
        }) 
        .join() 
       return out; 
      } else { 
       return input * 100 + "%"; 
      } 
     } 
    }) 

HTML-Code:

<h1 ng-repeat="x in records|filterOutput">{{x}}</h1> 

Ich möchte Ausgabe:

"19%" "C:13%" "C:19.6%|D:23%"

Aber console.log:

TypeError: input.indexOf is not a function

Was sollte Ich mache? Wie teilt man die Daten in AngularJS auf?

+0

Ich frage mich, wie Sie Ihre Aussage $ scope.records = { "0.19", "C: 0.13 "," C: 0.196 | D: 0.23 "} ausgeführt? Außerdem funktioniert indexOf für Array und String. Führen Sie eine console.log unter $ scope.records = {"0.19", "C: 0.13", "C: 0.196 | D: 0.23"} oder {{records}} in html aus, um zu sehen, ob es in den Datensätzen –

+0

Problem dort ist, dass Sie ein Objekt und kein Array haben ** indexOf ** funktioniert auf Arrays und Strings. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf – Azarus

+0

$ scope.records selbst ist kein gültiger JSON, es kann nicht mit ng-repeat verwendet werden. ng-repeat benötigt ein Array, um kein Objekt zu wiederholen. – superUser

Antwort

2

ich Ihren Code geändert haben, um die gewünschte Ausgabe zu erhalten.

Code Html

<h1 ng-repeat="x in records track by $index">{{x|filterOutput}}</h1> 

Variablenwert

$scope.records=["0.19","C:0.13","C:0.196|D:0.23"]; 

AngularJS Filter

.filter('filterOutput', function() { 
    return function (input) { 
     if (input.indexOf(":") != -1) { 
      var out = input 
       .split('|') 
       .map(function (v) { 
        var s = v.split(':') 
        return s[0] + ':' + (Number(s[1]) * 100) + "%" 
       }) 
       .join('|') 
      return out; 
     } else { 
      return input * 100 + "%"; 
     } 
    } 
}) 
+0

Danke. Und ich tue dies in Ihrer js 'var_input = Eingabe +" "'. Es kann auch lösen mypromble.Can ich frage Sie eine andere Frage ~ Ich habe eine Daten 'C: 0.28' dann die Ausgabe ist '28.000000000000000004%' Ich denke, ich habe nicht Ich werde mich nicht mit einigen Details befassen. –

+0

Wenn Sie die Dezimalpunkte einschränken möchten, können Sie .toFixed (Dezimalpunktwert) für die Variable verwenden, die den Zahlenwert enthält. Sie können mit unten genannten Code in den Filter für die Rück 'return s [0] + ':' + (Anzahl (s [1]) * 100) .toFixed (2) + "%"' –

0

Ich habe Ihren Code geändert, um das erwartete Ergebnis wie erwähnt zu erhalten. Bitte überprüfen Sie den folgenden Code. Ich habe eine Geige für ein besseres Verständnis geschaffen here

Controller:

.controller('FilterController', function ($scope) { 
    $scope.records = ["0.19","C:0.13","C:0.196|D:0.23"]; 
}); 

Filter:

.filter('filterOutput', function() { 
     return function (inputArray) { 
     return inputArray.map(function (input){ 
       if (input.indexOf(":") != -1) { 
       var out = input 
        .split('|') 
        .map(function (v) { 
         var s = v.split(':') 
         return s[0] + ':' + (Number(s[1]) * 100) + "%" 
        }) 
        .join('|') 
       return out; 
      } else { 
       return input * 100 + "%"; 
      } 
     }); 
     } 
    }); 
Verwandte Themen