angular - 当我以角度增加这个数字输入时,为什么会调用这个模板中的其余方法?
问题描述
如果您查看此stackblitz
代码:https ://stackblitz.com/edit/angular-ivy-xvxgrh
at line 7
in file recipie-ingredients.component
from recipie-ingredients
module 您可以看到我有一个数字输入。这意味着每次我增加该输入数字的值时modifyPeopleCount
都会调用该方法。但是,当我增加该输入数字时,该角度模板中的其余方法也会被调用。比如adjustIngredientAmount
也叫。这个功能如何在角度中调用?为什么不只modifyPeopleCount
调用方法?
解决方案
这是因为 Angular 的“变化检测”。
假设在 HTML 模板中你有这个:
<b> {{ adjustIngredientAmount(entry) }}</b>
所以应该显示的值是adjustIngredientAmount
带有参数的函数的结果entry
。但是编程语言可以知道函数结果的唯一合乎逻辑的方法是调用/执行它。
把这个想象成一个完整的黑盒,你无法查看它。所以你必须执行它才能获得价值。
Angular 正在运行“更改检测”(不会链接一篇文章,因为有这么多,只是寻找适合您阅读的内容),以便在某个函数的结果可能发生更改时进行某种“智能”猜测。
所以基本上:无论您在模板中使用什么函数来显示事物(或者如果在 等中使用) ngIf
, ngFor
只要“某事”发生变化,angular 都会执行这些函数,因为那时函数的结果可能不同。
“某事”并不容易解释,所以只需阅读有关它的文章即可。您还可以更改策略角度使用来评估何时可能发生了变化。
此外,还有一些方法可以手动“告诉”角度发生了变化。
像这样调用函数并没有“错误”,但是如果您的应用程序增长,您应该考虑避免在 html 中调用函数的模式,因为这些调用以后会成倍增长:)
编辑:添加我在其他答案下评论的内容:
一种解决方案可能是 OP 在创建数组时计算这些值,并将这些计算值作为一些元数据添加到数组中。然后他可以直接访问它们。但这始终是一种权衡。模板内的函数可以节省内存,但会消耗执行能力。另一种方式会消耗内存但节省执行力。
推荐阅读
- python - Hazelcast 和 python 没有适合 -120 类型的反序列化器
- oracle-apex - 创建新记录并返回新 ID
- java - 具有相同签名的 2 个应用程序之间的文件提供程序
- angular - 角度:我想要一个角度构建。但是有一个错误
- powershell - 如何在 PowerShell 7 上获取 UWP DisplayName 属性?
- git - 如何使用 VSC UI 选择差异补丁并将其应用于 Visual Studio Code 中的特定文件?
- flutter - 如何更改 Flutter 中的 Y 或 X 轴标签?
- ssis - 连接管理器的远程主机错误强行关闭了现有连接
- javascript - 将库导入 chrome 扩展内容脚本?
- android - Android BLE 蓝牙适配器状态