ng-change 在 ng-repeat 生成的 table 行中不起作用
ng-change does not work in the table row generated by ng-repeat
我有一个简单的 table 行。
该行由以下代码生成。
<tr ng-init="cacheChanged">
<td>Expiration Period</td>
<td ng-repeat="system in tableData.regions[0].systems">
<input type="text" ng-model="system.cacheDuration" ng-change="cacheChanged=true">
<span>h</span>
</td>
<td>
<button type="button" ng-click="saveCache()" ng-disabled="!cacheChanged">Save</button>
</td>
</tr>
当四个值中的任何一个发生变化时,保存按钮应该被启用。但是,它仍然始终处于禁用状态。任何人都知道为什么?提前致谢!
在您的情况下,您应该使用 $parent.cacheChanged
而不是 cacheChanged
变量。由于 ng-repeat
在渲染 DOM 时确实为每个循环创建了子作用域。简而言之,ng-repeat
中的 cacheChanged
变量与 button
上使用的 cacheChanged
变量不同。
标记
<td ng-repeat="system in tableData.regions[0].systems">
<input type="text" ng-model="system.cacheDuration" ng-change="$parent.cacheChanged=true">
<span>h</span>
</td>
有更好的方法是在定义 ng-model
时使用 Dot rule
,查看详细的 answer here。
我有一个简单的 table 行。
该行由以下代码生成。
<tr ng-init="cacheChanged">
<td>Expiration Period</td>
<td ng-repeat="system in tableData.regions[0].systems">
<input type="text" ng-model="system.cacheDuration" ng-change="cacheChanged=true">
<span>h</span>
</td>
<td>
<button type="button" ng-click="saveCache()" ng-disabled="!cacheChanged">Save</button>
</td>
</tr>
当四个值中的任何一个发生变化时,保存按钮应该被启用。但是,它仍然始终处于禁用状态。任何人都知道为什么?提前致谢!
在您的情况下,您应该使用 $parent.cacheChanged
而不是 cacheChanged
变量。由于 ng-repeat
在渲染 DOM 时确实为每个循环创建了子作用域。简而言之,ng-repeat
中的 cacheChanged
变量与 button
上使用的 cacheChanged
变量不同。
标记
<td ng-repeat="system in tableData.regions[0].systems">
<input type="text" ng-model="system.cacheDuration" ng-change="$parent.cacheChanged=true">
<span>h</span>
</td>
有更好的方法是在定义 ng-model
时使用 Dot rule
,查看详细的 answer here。