我遇到了一个问题,列表中的对象中的值正在更改,但更改未反映在 ng-href 中。
我有以下 HTML:
<div class='tabrow docRow'>
<span data-ng-repeat='f in dp.source.files'>
<span class='linkedDoc' >
<a class='attachedCaption' target='_blank'
data-ng-href='{{f.vpath}}'>{{f.caption}}
<img class='attachedSrc' data-ng-src='{{ f.vimg }}'/>
</a>
</span>
</span>
</div>
我在 dp.source 上有一个手表,当它更改调用时,一个函数会循环遍历 dp.source.files 中的每个 f 并添加 v.img 和 v.path。
vimg 在手表中的回调退出之前更新。vpath 是异步更新的,可能在回调完成后一两秒。因为它是在异步调用中更新的,所以我使用 $apply。
$scope.$watch('dp.source', function() {
for (var idx = 0; idx < $scope.dp.source.files.length; idx++) {
var f = $scope.dp.source.files[idx];
f.vimg = _ev.imgMapper(dataProvider.imgMap, f.path); <--- immediate
f.vpath = '#';
attachService.getURL(f); <-- asynch call that updates f.vpath
}
}
附加服务:
myObj.getURL = function(obj) {
syncService.getURL(obj, function(url) { <-- asynch return
$rootScope.$apply(function() {
obj.vPath = url;
});
});
};
vimg 立即出现在呈现的页面上,而 vpath 的更改永远不会反映在页面上。
我错过了什么?
需要明确的是,我已经验证了变量 f.vpath 正在更新。