2016-01-25 30 views
3

我在視圖中顯示的一些數據,但我需要先格式化,我在做類似的東西格式化數據之前使其

val.toFixed(2),這是好的,它的工作原理,但問題是,val有時帶有字母和toFixed(2)沒有考慮到這一點,所以不顯示字母。

所以我需要考慮到字母和數字,字母不必改變,只有像234235.345345435這樣的數字,顯然我需要它像這樣234235.34

下面是一些代碼,我使用

<table> 
    <tr> 
     <th ng-repeat='header in headers'>{{header.th}}</th> 
    </tr> 
    <tr> 
     <td ng-repeat='data in headers'> 
      <div ng-repeat='inner in data.td'> 
      <span ng-repeat='(prop, val) in inner'>{{val.toFixed(2)}}</span> 
      </div> 
     </td> 
    </tr> 
</table> 

,並在控制器

$scope.LoadMyJson = function() { 
     for (var s in myJson){ 
     $scope.data.push(s); 
     if ($scope.headers.length < 1) 
      for (var prop in myJson[s]){ 
      prop.data = []; 
      $scope.headers.push({th:prop, td: []}); 
      } 
     } 
     for (var s in $scope.data){ 
     for (var prop in $scope.headers){ 
      var header = $scope.headers[prop].th; 
       var data = myJson[$scope.data[s]][header];       
       $scope.headers[prop].td.push(data); 
       console.log($scope.headers[prop].td); 
     } 
     } 
}; 

,我準備this Fiddle

它是現在的方式,顯示錶正確,但正如你所看到的,該表缺少name,這是因爲toFixed方法。

那麼,我該怎麼辦?

+0

使用'{{typeof運算VAL === '號'? val.toFixed(2):val}}' – Tushar

+0

@Tushar'Lexer錯誤:在表達式[typeof val ==='number'中的列24-24 [?]處出現意外的下一個字符? val.toFixed(2):val]。' – TheUnnamed

回答

1

創建自定義filter以在您的模板上使用。

<table> 
    <tr> 
     <th ng-repeat='header in headers'>{{header.th}}</th> 
    </tr> 
    <tr> 
     <td ng-repeat='data in headers'> 
      <div ng-repeat='inner in data.td'> 
      <span ng-repeat='(prop, val) in inner'>{{val|formatValue}}</span> 
      </div> 
     </td> 
    </tr> 
</table> 


angular.module('whatever').filter('formatValue', function() { 
    return function (value) { 
    if (isNaN(parseFloat(value))) { 
     return value; 
    } 

    return parseFloat(value).toFixed(2); 
    } 
}); 
+0

我得到一個錯誤,試試這裏,我只是實現了過濾器:http://jsfiddle.net/gx236zdq/ – TheUnnamed

+0

我剛剛更新瞭解決方案和解決方案。 – Raulucco

1

你可以試試這個:

也就是說渲染使用angularjs作爲MVC 前端框架鑑於格式化數據的清潔方式:

  • 創建您的角度應用的過濾器。
  • 將你的過濾器包含在你的index.html中。
  • 使用像你這樣的過濾器:{{somedata | FILTERNAME}}

這是一個簡單的角度濾波解決您的問題,希望這將有助於你:

angular.module('app') 
.filter('formatHeader', function() { 
    return function(data) { 

     if(angular.isNumber(data)) { 
      return data.toFixed(2); 
     } 

     return data; 
    } 
}); 

和美國這樣說:

<table> 
<tr> 
    <th ng-repeat='header in headers'>{{header.th}}</th> 
</tr> 
<tr> 
    <td ng-repeat='data in headers'> 
     <div ng-repeat='inner in data.td'> 
     <span ng-repeat='(prop, val) in inner'>{{val | formatHeader}}</span> 
     </div> 
    </td> 
</tr> 

你可以看看這些參考文獻: