2013-06-21 28 views
6

我正在嘗試爲AngularJS編寫我的第一個自定義過濾器。我希望能夠確定某物是字符串還是數字。如果是數字,則使用內置過濾器| number對其進行格式化。AngularJS自定義文本過濾器/編號

我目前have a workaround using ng-if

HTML

<table> 
    <tr ng-repeat="(key, val) in data"> 
     <td>{{key}}</td> 
     <td ng-if="isNumber(val)">{{val | number}}</td> 
     <td ng-if="!isNumber(val)">{{val}}</td> 
    </tr> 
</table> 

控制器:

$scope.data = { 
    One:55689, 
    two:"consider all the options", 
    three:800243, 
    four:"all over", 
    five:"or just beginning" 
    }; 

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

我想這會是一個更好的解決方案,以將其指定爲它自己的過濾器雖然。這是我到目前爲止(是的,我知道這是光禿禿的骨頭......這是我的第一個)。

.filter('textOrNumber',function(){ 
    return function (input) { 
     if(typeof input === 'number'){ 
      console.log("I'm a number"); 
      //return as formatted number 
     } else { 
      console.log("Not a number"); 
      //do nothing, just return 
     }; 
     return input; 
    }; 
}) 

當確認是一個數字,可我只是把它應用的角度| number過濾器?或者我需要手動使用JavaScript自己做過濾器?

回答

17

我會注入$filter服務,然後編程來電號碼過濾器是這樣的:

angular.module('filters', []). 
filter('textOrNumber', ['$filter', function ($filter) { 
    return function (input, fractionSize) { 
     if (isNaN(input)) { 
      return input; 
     } else { 
      return $filter('number')(input, fractionSize); 
     }; 
    }; 
}]); 

這樣,您就可以使用您的textOrNumber過濾器是這樣的:

{{myText|textOrNumber:4}} 

這裏工作JSFiddle

+0

這是完全正確的。我知道它可以像這樣簡單。我沒有看過'$ filter'。我必須這樣做才能更好地理解它的能力。 – EnigmaRM

相關問題