2016-08-18 27 views
0

私はファイルのサイズを表示している角度オプションがありますが、変数の値を使って、ユーザーが「1MB」を選択してmaxMb変数1に割り当てるような整数が必要な場所を計算しています。文字列値から整数だけを設定するにはどうすればよいですか?

ctrl.jsあなたは(AB)parseInt、それは文字列を整数に変換しますし、それが数値以外の文字を打つ一度変換を停止するという事実を使用することができます

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

を見るキー - >値マップを記憶'filesizeoptions = {" 1MB ":1、" 2MB ":2}'、またはあなたの文字列から整数を抽出するための何らかの文字列のハッキング/変換。 'parseInt( '1MB') - > 1' –

+0

ちょうどmaxMbの最後の2文字を照会し、その文字列を整数として解析します。 –

答えて

1

あなたは、データセットのコントロールを持っている場合、私は、表示値とサイズ値の両方を持つオブジェクトの配列であることをfileSizeOptionを設定することをお勧めしたいです。そのようにして、オブジェクトのハッキング解析はありません。例えば、いずれかのコードスニペットと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

ありがとう、私はオブジェクトの配列を作成し、あなたのアプローチを使用してデータを制御しています。再度、感謝します。 – hussain

3

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

はい、うまくいっていますが、maxBytes = 1000 * 1000 * maxMbに割り当てられません。NaN – hussain

+2

@hussainコールバック内で実行する必要があります。さもなければ 'maxMb'は定義されません。 – 4castle

0

あなたは最後の2つの文字をオフにスライスして、int型に強制変換、またはすべての非数値文字を置換して、値を強制するために単項+を使用することができます。

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

関連する問題