我编写了以下自定义过滤器
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;
}
})
我编写了上面的自定义过滤器来理解角度过滤器。我们可以看到这个客户过滤器同时也适用于数组上的数字。由于过滤器中返回函数的“输入”参数需要两者。 但是在接受采访时我被问到过滤器功能是否也可以将对象作为输入。我在这里感到困惑,无法回答。 我试图在网上搜索,但没有得到任何好的答案。 有人可以帮我理解这个吗?
答案 0 :(得分:0)
首先,此过滤器适用于数组,但前提是您拥有所有数字。在您的示例中,它适用于ng-repeat
块,因为您在单个数组编号中使用过滤器。其次,过滤器可以将您传递给它的任何内容作为输入,甚至是对象。重要的是你妥善处理这些案件。例如,如果您只是按照过滤器函数现在的方式传递对象,那么它只会将该对象(null
,{}
,[]
)强制转换为0
并且在视图模板中返回20
。让我们在你的控制器中说你有以下
$scope.c = {
myNum: 100
};
您要打印的部分{{c | myFilt}}
会显示20
,而不是您认为如果处理得当,它会返回的内容。
或假设$scope.c = [100,200,300];
这也会显示20
因为在JavaScript对象中+数字被强制转换为0或空字符串。