2016-08-18 5 views
0

У меня есть угловые параметры, где я показываю размер файла, но я использую значение переменной для вычисления некоторых байтов, где мне нужно просто целое, например, если пользователь выбирает «1 МБ», я хочу назначить переменной maxMb 1. возможно ли это с помощью javascript?Как установить целое число из строкового значения?

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

либо хранить кнопочную> карты значения, например, 'filesizeoptions = {" 1MB ": 1," 2MB ": 2}' или некоторые хакерские или конвертирующие строки для извлечения целого из вашей строки. 'parseInt ('1MB') -> 1' –

+0

Просто выделите последние два символа maxMb и проанализируйте строку как целое. –

ответ

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

Вы можете (аb) использовать parseInt и тот факт, что она будет преобразовать строку в целое число и остановит преобразование, когда он попадает в нечисловой характер.

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

Вы можете отрезать последние два символа, а затем использовать одинарный + принуждать к междунар или заменить все не-цифровых символов, а затем принуждать значение.

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

Смежные вопросы