2016-05-31 5 views
0

Ich bin neu in AngularJS und ich versuche, das letzte Zeichen aus einer Variablen ($ scope.checkTotal) zu trimmen/schneiden/entfernen, wenn ng-click = "del() "ist angeklickt.

Vielleicht ist mein Ansatz falsch, aber bisher habe ich versucht:

$scope.checkTotal.slice($scope.checkTotal, -1); 

$scope.checkTotal.substring(0, $scope.checkTotal.length - 1); 

$scope.checkTotal.substring(0, length - 1); 


.controller('tipController', function($scope) { 

    // Numpad 
    $scope.checkTotal = '0.00'; 

    $scope.clicked = function (label) { 
    if($scope.checkTotal === '0.00') { 
     $scope.checkTotal = label; 
    } else { 
     $scope.checkTotal += label; 
    } 
    }; 

    // Prevent multiple decimals 
    $scope.clickedDot = function() { 
     if (($scope.checkTotal.indexOf('.') < 0) || ($scope.checkTotal === '0.00')) { 
     if ($scope.checkTotal === '0.00') { 
      $scope.checkTotal = '0.'; 
     } else { 
      $scope.checkTotal += '.'; 
     } 
     } 
    }; 

    $scope.del = function() { 
     $scope.checkTotal.substring(0, length - 1); 
    }; 

}); 
+1

'$ scope.checkTotal = $ scope.checkTotal.substring (0, Länge - 1)' –

+0

Jeder von dem, was Sie versucht haben, funktionieren würde, so lange, wie Sie den neuen Wert der Variablen zuweisen. –

Antwort

1

Ihre Vorgehensweise ist korrekt, aber die Methode Slice warten Sie die Länge Ihrer Variablen (String oder Array). Vielleicht können Sie es versuchen:

$scope.checkTotal = $scope.checkTotal.slice(0, $scope.checkTotal.length-1); 
+0

Wenn ich dies implementieren, entfernt es die gesamte Zeichenfolge und lässt mich mit ""? – nightowl

+0

ok Was ist Ihr Variablentyp? Was ist der Inhalt Ihres Variablentyps? –

+0

Wie geschrieben, wird das letzte Zeichen der Zeichenfolge zurückgegeben. Sie wollen alles * außer * das letzte Zeichen, also sollte es "0, Länge-1", nicht "Länge, -1" sein. (Auch die Erklärung ist unverständlich.) –

3

Sie müssen die Rückgabewerte aus den Funktionsaufrufe zuweisen. Zum Beispiel

$scope.checkTotal.substring(0, length - 1); 

sollten

$scope.checkTotal = $scope.checkTotal.substring(0, $scope.checkTotal.length - 1); 

Auch sein sollten Sie wahrscheinlich den Fall betrachten, dass jemand mit nichts in der Textbox klickt löschen. Wäre peinlich zu bekommen $scope.checkTotal.substring(0, -1);

+0

Ihre Antwort funktioniert, aber auch $ scope.checkTotal = $ scope.checkTotal.slice (0, $ scope.checkTotal.length-1); unten. Gibt es einen Grund, einen über den anderen zu wählen (Teilstring vs Slice)? – nightowl

+0

Der Hauptunterschied, den ich mir vorstellen kann, ist, dass substr die Start- und Endpositionsargumente vertauscht, wenn end> ​​start und zurückgeben, welcher Teil der Zeichenkette darin liegt. Slice gibt in diesem Anwendungsfall eine leere Zeichenfolge zurück. Für eine detailliertere Erklärung: https://rapd.wordpress.com/2007/07/12/javascript-substr-vs-substring/. –

1

Sie müssen das Ergebnis der Variable zurück zuweisen. Slice auch Scheiben von Anfang bis Ende. Versuche dies.

$scope.checkTotal = $scope.checkTotal.slice(0, -1); 
+0

Diese Antwort funktioniert zusammen mit den anderen unten. Der Unterschied ist .slice vs .substring. Gibt es eine Faustregel oder eine Überlegung, um eine über die andere zu wählen? – nightowl

+0

Es gibt mehrere Methoden, die alle dasselbe tun. Der einzige Unterschied ist, dass sie ein paar kleine Macken haben, die zu unerwartetem Verhalten führen können, wenn sie falsche Argumente erhalten. Dies wurde in einer anderen Frage http://stackoverflow.com/questions/2243824/what-is-the-difference-between-string-slice-and-string-substring beantwortet. –

Verwandte Themen