【问题标题】:What is the type of "input" parameter in filter function过滤函数中“输入”参数的类型是什么
【发布时间】:2017-10-26 17:56:25
【问题描述】:

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

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>

而 Angular 的 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;
}
})

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

【问题讨论】:

  • 您没有在任何地方将数组传递给您的过滤器。您正在将 arr3 的各个元素传递给您的过滤器。无论如何,您可以传递完整的数组(尽管输出将与您当前得到的不同)甚至是一个对象。试一试,看看你会得到什么。
  • 我在 ng-repeat 中传递过滤器“myFilt”从 ng-repeat 中获取每个数组元素并将它们存储在另一个数组中

标签: angularjs html angularjs-filter


【解决方案1】:

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

$scope.c = {
  myNum: 100
};

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

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

【讨论】:

  • 能否举一个传递数组或对象的例子,因为我还是觉得有点难理解
  • 非常感谢 :) 我同样理解我们可以将整个数组作为输入传递给它.. 我会尝试.. 再次非常感谢 :)
  • 没问题@Punit过滤器将接收范围变量中的任何内容作为输入。
猜你喜欢
  • 2016-11-22
  • 2016-08-28
  • 2019-12-26
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 2020-09-11
  • 1970-01-01
相关资源
最近更新 更多