“状态”是指在整个应用程序中设置的变量/属性/等。这些值有可能在任何给定时间改变。文档说过滤器不应该依赖于外部“状态”。过滤器需要了解的所有内容都应在过滤时作为参数传递,然后过滤器应具有进行过滤并返回结果所需的一切。查看文档中的演示,您将在“状态过滤器”,该过滤器依赖于用于进行过滤的服务。该服务值可能会在一个
$digest周期内更改,因此
$stateful必须在过滤器上设置该属性,以便Angular再次运行过滤器以确保依赖项未更改状态,这会更改过滤器的结果。
因此,所有“状态”应在参数中,如下所示:
<p>{{myData | multiplyBy:multiplier}}</p>
使用类似的过滤器:
.filter('multiplyBy', function() { function filter(input, multiplier) { return input * multiplier; } return filter;})
如果数据或参数更改,则过滤器将再次运行。
该
stateful版本将是这样的(不推荐!):
<p>{{myData | myFilter}}</p>
过滤器从外部来源获取所需信息:
.filter('myFilter', ['someDependency', function(someDependency) { function filter(input) { // let's just say `someDependency = {multiplier: 3}` return input * someDependency.multiplier; } filter.$stateful = true; return filter;}])
在该示例过滤器中,
someDependency.multiplier应该将其作为参数传递给过滤器(如第一个示例中所示),而不是作为过滤器的依赖项。
为了进一步说明问题:如果您调用了如下函数:
foo(20)并获得的结果
40,则重复该过程应获得相同的结果。如果您
foo(20)再次打来电话
92,那会很混乱,对吗?假设
foo不是一个用于返回随机值的函数,那么它每次返回不同数字的唯一方法是,它是否基于隐藏状态(内部发生某些变化,而不是作为参数传递)而执行不同的 *** 作。每次给定相同参数时函数将返回相同值的想法称为“幂等”。
注意:$stateful
在Angular 1.3中似乎是新的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)