我无法搂住这个。这是一个例子......有人请解释一下吗?
在AngularJs中,可以编写自定义过滤器。一个这样的过滤器看起来像这样(感谢Adam Freeman和他关于Angular的新书):
angular.module("exampleApp")
.filter("labelCase", function() {
return function (value, reverse) {
if (angular.isString(value)) {
....
}
};
});
在此示例中,内部函数中的“value”值由Angular自动提供。 “反向”参数由代码开发人员提供,必须由HTML插入。 “反向”的值由HTML提供如下:
... <tr>{{p.category | labelCase:true}}</td>
所以,这是我的问题:
我们怎么知道Angular会自动将值数据插入“value”参数?这是常识吗?
为什么HTML“labelCase:true”调用不必为函数中的“value”参数提供占位符?换句话说,Angular如何知道将“true”应用于第二个参数?
这怎么不会造成令人难以置信的脆弱代码?如果Angular人决定在未来提供另一个自动提供的论点,会发生什么?如果发生这种情况,这不会破坏当前编写的内部函数:return function(value,reverse){...}?
这对我来说非常困惑。我期待着更好地理解这一切。
答案 0 :(得分:0)
关于创建客户过滤器的Angular文档说:
这个工厂函数应该返回一个新的过滤函数,它将输入值作为第一个参数。
这意味着Angular会将函数的输入值作为value
参数提供,因为它是第一个参数。
文档继续说:
任何过滤器参数都作为过滤函数的附加参数传入。
因此,HTML不必处理为第一个参数留下位置,Angular负责以适当的顺序提供它们。
就像大多数Javascript函数一样,你必须知道正确调用它们的参数顺序。开发人员通常保证他们不会不兼容地更改订单。可以在参数列表的末尾添加其他参数;如果没有提供,函数必须适当地默认它们(JS自动将它们设置为undefined
)。
答案 1 :(得分:0)
value
)input
可以解释为{{p.category |...
从右侧开始
value
是过滤器的输入。由:
分隔的每个附加值都将作为参数添加到过滤器回调中。 {{p.category | customFilter:secondParam:thirdParam: .... }}
angular.module("exampleApp")
.filter("labelCase", function() {
return function (input, someSecondParam, someThirdParam) {
if (angular.isString(input)) {
....
}
};
});