2016-01-25 31 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> 

你可以看看这些参考文献: