10

数値と値のテキストが混在するオブジェクトがあります。numbersオブジェクトの値が数値の場合は、フィルターを適用したいと思います(明らかに)。でも数字じゃないときは文字列を吐き出すだけでいいんです。そのままで、値に適用| numberすると数値がフォーマットされますが、文字列値は空のままになります (結局のところ、それらは数値ではありません)。

私はそれがカスタムフィルターでなければならないと推測しています(私はまだ作成する必要がありました). を行うときに HTML 内でのみ行う方法はありますng-repeatか?

<table>
      <tr ng-repeat="(metric, metricData) in data">
        <td>{{metric}}</td>
        <td>{{metricData | number}}</td>
      </tr>
</table>

$scope.data = { name:"this is the name", 
                score:48
                outcome:"as expected",
                attendance:820,
                total:212.34
              };
4

3 に答える 3

3

これが古いことはわかっていますが、最善の解決策はロジックをフィルターに移動することだと思います。

app.filter("metricDataFilter", function($filter) {
    return function(value) {
      if(angular.isNumber(value)) {
          return $filter("number", value);  
      }

      return value;
    }  
}

そうすれば、HTML はより簡潔になり、Angular は dom 要素を再描画する必要がなくなります

<table>
    <tr ng-repeat="(metric, metricData) in data">
        <td>{{metric}}</td>
        <td>{{metricData | metricDataFilter}}</td>
    </tr>
</table>
于 2015-12-05T13:24:17.297 に答える
3

この方法で試すことができます-コントローラーでは、提供された値が文字列か数値かを識別する関数を使用できます。

$scope.isNumber = function (value) {
    return angular.isNumber(value);
};

次に、ビューでは次のようになります。

<table>
    <tr ng-repeat="(metric, metricData) in data">
        <td>{{metric}}</td>
        <td ng-show="isNumber(metricData)">{{metricData | number}}</td>
        <td ng-hide="isNumber(metricData)">{{metricData}}</td>
    </tr>
</table>

したがって、metricDataが数値の場合はフィルタリングされ、文字列の場合はそのまま出力されます。

于 2013-06-20T06:23:13.993 に答える