我有一个页面,它使用ngRepeat对资源中的对象集合。在对象上更改任何字段时,资源将发布到服务器,服务器将再次返回对象集合并在模型上更新。这会导致ngRepeat重新渲染并将焦点丢失在当前编辑的字段上。有没有办法检查资源是否在发送到服务器的数据和返回的数据之间发生了任何变化,只有在模型不同时才更新模型?
答案 0 :(得分:0)
添加属性set-focus-if =""
directive('setFocusIf', function ($timeout) {
return {
link: function ($scope, $element, $attr) {
$scope.$watch($attr.setFocusIf, function (value) {
if (value) {
$timeout(function () {
// We must reevaluate the value in case it was changed by a subsequent
// watch handler in the digest.
if ($scope.$eval($attr.setFocusIf)) {
$element[0].focus();
}
}, 0, false);
}
});
}
}
})
答案 1 :(得分:0)
使用"跟踪"。如果您的资源项具有特定ID,则为
ng-repeat="item in resource.items track by item.id"
这将阻止角度重新渲染已渲染的项目,并应保留DOM的状态。
答案 2 :(得分:0)
要解决此问题,我们可能会决定将资源包装在我们自己的服务中。我们的服务将进行手动差分处理,只有在发生任何变化时才更新模型。