2013-06-21 41 views
6

Tôi đang cố gắng viết bộ lọc tùy chỉnh đầu tiên của mình cho AngularJS. Tôi muốn khả năng xác định nếu một cái gì đó hoặc là một chuỗi hoặc số. Nếu đó là một số, nó định dạng nó như vậy với bộ lọc tích hợp | number.Bộ lọc tùy chỉnh AngularJS cho văn bản/số

Tôi hiện 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> 

Bộ điều khiển:

$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); 
    }; 

I figured nó muốn được một giải pháp tốt hơn để gán nó như nó là bộ lọc riêng mặc dù. Đây là những gì tôi có cho đến nay (vâng tôi biết đó là xương trần ... đó là cái đầu tiên của tôi).

.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; 
    }; 
}) 

Khi xác thực là số, tôi có thể áp dụng bộ lọc Angular | number không? Hoặc tôi có cần phải tự làm bộ lọc với javascript bản thân mình?

Trả lời

17

tôi sẽ bơm $filter dịch vụ và sau đó gọi lọc số programatically như thế này:

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

Bằng cách này bạn sẽ có thể sử dụng bộ lọc textOrNumber của bạn như thế này:

{{myText|textOrNumber:4}} 

đây đang làm việc JSFiddle .

+0

Đó là chính xác. Tôi biết nó có thể đơn giản như thế này. Tôi đã không nhìn vào '$ filter'. Tôi sẽ phải làm điều đó để hiểu rõ hơn về khả năng của nó. – EnigmaRM

Các vấn đề liên quan