2016-07-14 41 views
0

我有以下JSfiddle example從控制器到輸入字段的角度綁定

HTML

<div ng-app="app" ng-controller="Example"> 
    <input type="number" ng-model="data.mainOdd1" placeholder="#1 Main Odd" onfocus="this.placeholder=''" min="0" step="any" ui-blur="testfn('mainOdd1', $event, '#1 Main Odd');"> 
</div> 

的Javascript

angular 
    .module('app', []) 
    .directive('uiBlur', function($parse) { 
    return function(scope, elem, attrs) { 
     elem.bind('blur', function(event) { 
     scope.$apply(function() { 
      $parse(attrs.uiBlur)(scope, { 
      $event: event 
      }); 
     }); 
     }); 
    }; 
    }) 
    .controller('Example', function($scope) { 
    $scope.data = { 
     'mainOdd1' : '', 
    }; 

    $scope.testfn = function(propertyName, $event, placeHolder) { 
     debugger; 
     if (($event.target.validity.valid == false) || 
      ($scope.data[propertyName] == '')) 
     { 
     $scope.data[propertyName] = ''; 
     $event.target.placeholder = placeHolder; 
     return;   
     } 
     debugger;  
     $scope.data[propertyName] = $scope.data[propertyName].toFixed(2); 
    }; 
    }); 

我儘量只保留兩位小數。

我看到兩個問題,第一個是視圖中的數字沒有改變,儘管mainOdd1確實改變了。第二個是我在控制檯中遇到了關於使用toFixed函數的錯誤。

我在這裏做錯了什麼?

感謝

+0

toFi xed()函數重定位字符串,而你輸入的類型是數字 –

+0

你的1個問題不清楚 –

+0

我的代碼段解決了你的2個問題。 –

回答

1

嗨toFixed錯誤,因爲同時轉換toFIxed它將成爲字符串,但在數量上你的輸入類型,因此它不會接受這樣u必須改變浮動

$scope.testfn = function(propertyName, $event, placeHolder) { 
     debugger; 
     if (($event.target.validity.valid == false) || 
      ($scope.data[propertyName] == '')) 
     { 
     $scope.data[propertyName] = ''; 
     $event.target.placeholder = placeHolder; 
     return;   
     } 
     debugger;  
     $scope.data[propertyName] = parseFloat($scope.data[propertyName].toFixed(2)); 
    }; 
0

你輸入的情況是類型=「數量」。您必須使用此

$scope.data = { 
    'mainOdd1' : 0, 
}; 

,並且可以使用步驟= 0.01輸入以便僅具有兩個小數

+0

嘿,它沒有給我相同的功能。當我設置('mainOdd1':0)時,佔位符在開始時不工作,因爲mainOdd1已經等於零https://jsfiddle.net/wygy9s87/1/。至於設置爲0.01,它只會給我無效的信號,但這不是我想要的行爲。 –

0

問題是這一行

$scope.data[propertyName].toFixed(2) 

使用Unary plus將其轉換爲編號

$scope.data[propertyName] = +$scope.data[propertyName].toFixed(2); 
0

運行段,以解決您的兩個問題:

angular 
 
    .module('app', []) 
 
    .directive('uiBlur', function($parse) { 
 
    return function(scope, elem, attrs) { 
 
     elem.bind('blur', function(event) { 
 
     scope.$apply(function() { 
 
      $parse(attrs.uiBlur)(scope, { 
 
      $event: event 
 
      }); 
 
     }); 
 
     }); 
 
    }; 
 
    }) 
 
    .controller('Example', function($scope) { 
 
    $scope.data = { 
 
     'mainOdd1' : '', 
 
    }; 
 

 
    $scope.testfn = function(propertyName, $event, placeHolder) { 
 
     if (($event.target.validity.valid == false) || 
 
      ($scope.data[propertyName] == '')) 
 
     { 
 
     $scope.data[propertyName] = ''; 
 
     $event.target.placeholder = placeHolder; 
 
     return;   
 
     } 
 
     $scope.data[propertyName] = parseFloat($scope.data[propertyName]).toFixed(2); 
 
    }; 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.js"></script> 
 
<div ng-app="app" ng-controller="Example"> 
 
    <input type="text" ng-model="data.mainOdd1" placeholder="#1 Main Odd" onfocus="this.placeholder=''" min="0" step="any" ui-blur="testfn('mainOdd1', $event, '#1 Main Odd');"> 
 
</div>