0

我有一个 HTML 表单,它由一个ngModel名为a. 当用户在表单中输入数据时,资源会在服务器上使用 PUT 请求进行更新。我需要使用服务器从此请求返回的数据来更新/替换我的本地数据,因为类似的事情lastModified会发生变化。

替换整个对象a = bb服务器响应在哪里)会导致整个 HTML 表单重新呈现,因为就ngModel目前而言,它有一个全新的对象。这也很糟糕,因为这意味着,如果用户有一个输入焦点,那么当表单重新呈现时,输入将失去焦点。

我编写了一个函数来递归地添加/删除/更新a对象上的键,同时保留所有引用,从而避免重新渲染。但是我觉得这是一个不好的方法。这是 Angular 中的一个常见问题,我还能如何解决它?还是我做错了什么?

更新:我的表格上没有ngModel。相反,表单是ngRepeat.

4

1 回答 1

1

首先要澄清一下-我希望您的表单上没有ngModel,而是在表单的每个输入上都没有?

现在来点有用的:你知道 angular.extend 吗?它用于通过源对象中的值扩展目标对象,保留引用。引用您的“a”对象和“b”响应对象可能很简单:

angular.extend(a, b);

还有一个更强大的同名 jQuery 等价物。(不过,当您使用 jQuery 时,不要忘记您的 digest/apply 调用)。

http://docs-angularjs-org-dev.appspot.com/api/angular.extend

您可能还想研究以更结构化的方式处理资源。这一点应该特别感兴趣:

重要的是要意识到调用 $resource 对象方法会立即返回一个空引用(对象或数组取决于 isArray)。从服务器返回数据后,现有参考将填充实际数据。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现。拥有一个空对象不会导致渲染,一旦数据从服务器到达,那么该对象就会被数据填充,并且视图会自动重新渲染自身以显示新数据。

http://docs-angularjs-org-dev.appspot.com/api/ngResource .$resource

于 2013-07-11T22:50:17.333 回答