2016-08-18 21 views
0

Ich habe angular Optionen, wo ich Dateigröße anzeigen, aber ich benutze Variablenwert, um einige Bytes zu berechnen, wo ich gerade Ganzzahl wie wenn Benutzer wählen "1MB" möchte ich auf Variable maxMb 1. Ist es möglich, mit Javascript?Wie kann ich nur Ganzzahl aus Zeichenfolge Wert festlegen?

ctrl.js

var maxMb; 
$scope.FileSizeOptions = ["1MB","2MB","3MB","4MB","5MB"]; 
    $scope.$watch('selectedFileSize',function (Val) { 
     maxMb = Val; 
     console.log('File Size', maxMb); 
    }) 

var maxBytes = 1000 * 1000 * maxMb; 
+0

entweder speichern eine Key-> Wert Karte, zum Beispiel 'filesizeoptions = {" 1MB ": 1," 2MB ": 2}', oder ein String-Hacken/Konvertieren, um die ganze Zahl aus Ihrer Zeichenkette zu extrahieren. 'parseInt ('1MB') -> 1' –

+0

Einfach die letzten zwei Zeichen von maxMb übergeben und die Zeichenfolge als Ganzzahl analysieren. –

Antwort

1

Wenn Sie die Kontrolle über den Datensatz haben, empfehle ich fileSizeOption Einstellung würde ein Array von Objekten zu sein, dass sowohl eine Anzeigewert und einen Größenwert hat. Auf diese Weise gibt es keine Hack-Analyse von Objekten. Siehe Code-Schnipsel und codePen

http://codepen.io/Lethargicgeek/pen/BzEjPX

angular.module("myApp", []); 
 

 
angular.module("myApp").controller("myCtrl", ctrlFn); 
 

 
function ctrlFn() { 
 
    var $ctrl = this; 
 
    $ctrl.fileSizeOptions = [{ 
 
    size: 1, 
 
    value: "1MB" 
 
    }, { 
 
    size: 2, 
 
    value: "2MB" 
 
    }, { 
 
    size: 3, 
 
    value: "3MB" 
 
    }, { 
 
    size: 4, 
 
    value: "4MB" 
 
    }, { 
 
    size: 5, 
 
    value:"5MB" 
 
    }]; 
 
    $ctrl.onChange = onChange; 
 

 
    function onChange() { 
 
    $ctrl.maxMb = $ctrl.selectedFileSize.size; 
 
    $ctrl.maxBytes = 1000 * 1000 * $ctrl.maxMb; 
 
    } 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.5/angular.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/> 
 
<div ng-app="myApp"> 
 
    <div ng-controller="myCtrl as $ctrl"> 
 
    <select ng-model="$ctrl.selectedFileSize" 
 
      ng-options="opt as opt.value for opt in $ctrl.fileSizeOptions" 
 
      ng-change="$ctrl.onChange()"> 
 
    </select> 
 
    
 
    <dl> 
 
     <dt>$ctrl.selectedFileSize</dt> 
 
     <dd>{{$ctrl.selectedFileSize}}</dd> 
 
     
 
     <dt>$ctrl.maxMb</dt> 
 
     <dd>{{$ctrl.maxMb}}</dd> 
 
     
 
     <dt>$ctrl.maxBytes</dt> 
 
     <dd>{{$ctrl.maxBytes}}</dd>  
 
    </dl> 
 
    </div> 
 
</div>

+0

Danke, ich habe die Kontrolle über Daten, die ich Array von Objekten erstellt habe und Ihren Ansatz verwenden. Danke noch einmal. – hussain

3

Sie können (ab) verwenden parseInt und die Tatsache, dass es die Zeichenfolge in eine ganze Zahl konvertiert und wird die Konvertierung beendet, sobald es einen nicht-numerischen Zeichen trifft.

console.log(parseInt('1MB', 10)); // 1 
 
console.log(parseInt('2MB', 10)); // 2 
 
console.log(parseInt('5MB', 10)); // 5 
 
console.log(parseInt('10MB', 10)); // 10

+0

Ja, das hat funktioniert, aber dann kann ich es nicht maxBytes zuweisen = 1000 * 1000 * maxMb kommt NaN – hussain

+2

@hussain Sie müssen es innerhalb Ihres Callbacks ausführen. Andernfalls wird 'maxMb' nicht definiert. – 4castle

0

Sie können die letzten beiden Zeichen abschneiden, und verwenden Sie dann die einstelligen + in einen int zu zwingen, oder alle nicht-numerische Zeichen ersetzen und dann den Wert zu zwingen.

console.log(+'1MB'.slice(0, -2)); 
 
console.log(+'1MB'.replace(/\D/g, ''));

Verwandte Themen