首页 > 解决方案 > 如何强制更新 ng-init ?

问题描述

我发现更新 rowIndex 后 ng-init 没有更新。

<div ng-init="item = getItem(rowIndex)">
   {{ item.Name }} 
</div>

更改 rowIndex 后项目不会更新(即使使用 $timeout 进行更改)

是否有其他指令可以避免使用以下肮脏技巧:

<div ng-repeat="item in [getItem(rowIndex)]">
   {{ item.Name }} 
</div>

标签: javascriptangularjs

解决方案


另一种方法是在虚假属性中设置变量:

<div x="{{item = getItem(rowIndex)}}">
    {{ item.Name }} {{item.Value}}
</div>

在每个摘要周期中,item都会更新 的值。

在这种情况下,如果item具有多个属性,则该getItem函数只需要调用一次。

item请记住,控制器在更改时仅更新一次的值而不是在每个摘要周期rowIndex调用函数会更有效。getItem


避免使用ng-init

避免使用ng-init. 它将模型和视图纠缠在一起,使代码难以理解、测试、调试和维护。而是在控制器中初始化模型。

从文档:

初始化

可以滥用该指令在模板中添加不必要的逻辑量。仅适用于少数几个用途ngInit,例如为 的特殊属性起别名ngRepeat,如下面的演示所示;以及通过服务器端脚本注入数据。除了这几种情况,您应该使用控制器而不是ngInit在作用域上初始化值。

— AngularJS ng-init 指令 API 参考


推荐阅读