AngularJS 卷曲绑定中的函数每次点击都会触发
AngularJS function inside curly binding triggers for each click
我有一个用例,我必须通过触发对 returns 用户名的函数的调用来将值绑定到 table 中的列。 table 行使用 ng-repeat-start 循环,分页用于显示记录。
代码 1:
<td class="col-sm-2 col-md-2 col-lg-2">
{{::getLogUserName(site,key,innerKey)}}
</td>
代码 2 :
<td class="col-sm-2 col-md-2 col-lg-2"
ng-init="userName = getLogUserName(site,key,innerKey)">
{{userName}}
</td>
代码 3 :
<td class="col-sm-2 col-md-2 col-lg-2"
ng-init="userName = ::getLogUserName(site,key,innerKey)">
{{userName}}
</td>
以上3个例子在Page 1中运行良好,但对于后续页面,大多数情况下都不会触发该功能。
代码 4 :
<td class="col-sm-2 col-md-2 col-lg-2">
{{getLogUserName(site,key,innerKey)}}
</td>
getLogUserName 会针对每个点击事件和操作触发,这不应该是这种情况,因为分页条目可能是每页 100 个并且每次都不会触发该功能。
是否有替代方案可以在不影响性能的情况下实现我期望的功能
对于以下示例,函数在每个摘要循环中至少执行一次:
<td class="col-sm-2 col-md-2 col-lg-2">
{{getLogUserName(site,key,innerKey)}}
</td>
这符合预期。应该注意函数是 idempotent 并且使用最少的计算资源。
还要避免调用异步操作的函数。
getLogUserName doesn't trigger any API call, just a normal function which filters username and returns it.
在那种情况下,使用自定义过滤器会更有效率:
<td class="col-sm-2 col-md-2 col-lg-2">
{{ userArr | customFilter : site : key : innerKey }}
</td>
app.filter("customFilter", function() {
return function(userArr, site, key, innerKey) {
// filter code
// ...
return result;
};
})
在模板中,过滤器仅在其输入更改时执行。这比在每个 $digest
上执行过滤器的性能更高,就像 expressions.
的情况一样
有关详细信息,请参阅
我有一个用例,我必须通过触发对 returns 用户名的函数的调用来将值绑定到 table 中的列。 table 行使用 ng-repeat-start 循环,分页用于显示记录。
代码 1:
<td class="col-sm-2 col-md-2 col-lg-2">
{{::getLogUserName(site,key,innerKey)}}
</td>
代码 2 :
<td class="col-sm-2 col-md-2 col-lg-2"
ng-init="userName = getLogUserName(site,key,innerKey)">
{{userName}}
</td>
代码 3 :
<td class="col-sm-2 col-md-2 col-lg-2"
ng-init="userName = ::getLogUserName(site,key,innerKey)">
{{userName}}
</td>
以上3个例子在Page 1中运行良好,但对于后续页面,大多数情况下都不会触发该功能。
代码 4 :
<td class="col-sm-2 col-md-2 col-lg-2">
{{getLogUserName(site,key,innerKey)}}
</td>
getLogUserName 会针对每个点击事件和操作触发,这不应该是这种情况,因为分页条目可能是每页 100 个并且每次都不会触发该功能。
是否有替代方案可以在不影响性能的情况下实现我期望的功能
对于以下示例,函数在每个摘要循环中至少执行一次:
<td class="col-sm-2 col-md-2 col-lg-2">
{{getLogUserName(site,key,innerKey)}}
</td>
这符合预期。应该注意函数是 idempotent 并且使用最少的计算资源。 还要避免调用异步操作的函数。
getLogUserName doesn't trigger any API call, just a normal function which filters username and returns it.
在那种情况下,使用自定义过滤器会更有效率:
<td class="col-sm-2 col-md-2 col-lg-2">
{{ userArr | customFilter : site : key : innerKey }}
</td>
app.filter("customFilter", function() {
return function(userArr, site, key, innerKey) {
// filter code
// ...
return result;
};
})
在模板中,过滤器仅在其输入更改时执行。这比在每个 $digest
上执行过滤器的性能更高,就像 expressions.
有关详细信息,请参阅