【发布时间】:2015-08-12 18:21:45
【问题描述】:
已解决 - 我有这个plunkr,它展示了我面临的问题。这是一个简单的图片上传器,它也使用FileReader 来显示图片(感谢angular-file-uploads)。我把它放在一个可以添加和删除的动态形式中。
问题:
在此plunkr 中,直到单击
Add Another Image后才会显示dataUrl。这可能是唯一的问题,因为 图像很好地显示在我的网站上。 --已解决如果您将图像上传到第一个表单,然后单击
Add Another Image,然后单击第一个选项卡,然后删除第一个选项卡,$scope.images中的数据被删除但 DOM 没有更新。添加$scope.$apply()会导致摘要已在进行中错误。上传输入显示旧文件名,但输入实际为空。
我的问题是:删除图像后如何更新 DOM?
更新:问题 #1 已解决,但问题 #2 和 #3 仍然存在。
更新2:我尝试为<input type="file" onchange="..." 附加$scope.$apply,但使用splice() 删除图像不会触发onchange 事件。
Update3:我添加了一个带有ng-model="image.caption" 的简单文本输入,以查看DOM 是否会适当更新。确实如此。如果images[0] 被images[1] 删除,DOM 也会正确更新。
Update4: Grundy 发现了问题:track by $index。删除它会使一切按预期工作。不完全确定为什么。
【问题讨论】:
-
为什么在 ng-repeat 中使用
track by $index? -
我使用
track by $index以便angular-file-uploads="{{ $index }}"知道上传了哪个图像编号。我尝试删除track by $index,它似乎.......工作........而且,似乎 $index 无论如何都可以工作。我认为这解决了它! -
@Grundy,我希望你能添加你的解释作为答案。
-
$index是 ngRepeat 中的特殊变量,它始终可用并且点头取决于您如何跟踪
标签: javascript angularjs dom angularjs-ng-repeat