过滤函数

时间:2017-10-26 17:56:25

标签: angularjs html5 angularjs-filter

我编写了以下自定义过滤器

HTML代码为:

<!DOCTYPE>
<html>
    <head>
    </head>
    <body>
        <div ng-app="myApp">
            <div ng-controller="myCont">

                <div ng-repeat="b in ar2">
                    {{b}}
                </div>

                {{a}}
                {{c | myFilt}}
                <div ng-repeat="x in arr3">
                    {{x|myFilt}}
                </div>
            </div>
        </div>
        <script src="jquery-3.0.0.js"></script>
        <script src="angular.js"></script>
        <script src="angular_try.js"></script>

    </body>
</html>

角度js代码是:

var myApp = angular.module("myApp",[])

myApp.controller("myCont",["$scope","$filter",function($scope,$filter){
$scope.a ="pro";
$scope.arr = ["abc","bcd","cdb"];
$scope.arr3 = [100,200,300];
$scope.ar2=[];
$scope.c = 10;
for(i in $scope.arr)
{
$scope.ar2[i] = $filter("uppercase")($scope.arr[i]);
}
}])


myApp.filter("myFilt",function(){
return function(input){
    return input + 20;
}
})

我编写了上面的自定义过滤器来理解角度过滤器。我们可以看到这个客户过滤器同时也适用于数组上的数字。由于过滤器中返回函数的“输入”参数需要两者。 但是在接受采访时我被问到过滤器功能是否也可以将对象作为输入。我在这里感到困惑,无法回答。 我试图在网上搜索,但没有得到任何好的答案。      有人可以帮我理解这个吗?

1 个答案:

答案 0 :(得分:0)

首先,此过滤器适用于数组,但前提是您拥有所有数字。在您的示例中,它适用于ng-repeat块,因为您在单个数组编号中使用过滤器。其次,过滤器可以将您传递给它的任何内容作为输入,甚至是对象。重要的是你妥善处理这些案件。例如,如果您只是按照过滤器函数现在的方式传递对象,那么它只会将该对象(null{}[])强制转换为0并且在视图模板中返回20。让我们在你的控制器中说你有以下

$scope.c = {
  myNum: 100
};

您要打印的部分{{c | myFilt}}会显示20,而不是您认为如果处理得当,它会返回的内容。

或假设$scope.c = [100,200,300];这也会显示20因为在JavaScript对象中+数字被强制转换为0或空字符串。