当第一次在我的应用程序中使用Angular-Xeditable时,我遇到了一个问题,试图弄清楚如何保存对通过ng-repeat循环访问的对象所做的x可编辑更改。
该文档主要关注使用onbeforesave和onaftersave进行验证,虽然它确实显示了它可以用于保存内容,但示例并没有说明如何将$data (或$index)以外的任何内容传递给onbeforesave/onaftersave方法。示例展示了如何保存像$scope.person这样的内容,如果您只有一个项目,这是很好的。
但是如果列表中的第三个人是经过编辑的呢?你当然不想把它们都保存起来。如何只保存被编辑的对象,而不是保存数组中的所有内容?
发布于 2014-05-02 08:07:58
Angular-Xeditable文档并没有清楚地说明这一点,但是看起来$data (和$index)只是注入值,您可以向保存/验证方法传递几乎任何您想要的东西。所以你应该做的就是传递对象本身(或者仅仅传递它的id)。
给定以下标记:
<div ng-repeat="p in people">
<a href="#" editable-text="p.name" onaftersave="updatePerson(p)">{{p.name}}</a>
</div>然后,您的控制器中将包含以下代码:
$scope.updatePerson = function(person) {
var ret = PersonService.save(person); // or whatever save mechanism you use
// You need to return a error string if save fails, true otherwise
if (ret !== null) { // You have to make sure this logic works for your save service
return ret;
}
return true;
}有了这个,你就可以以任何你喜欢的方式来处理保存。您不一定要只使用Angular-Xeditable提供的$data或$index值。你可以很容易地做这样的事情:
<div ng-repeat="p in people">
<a href="#" editable-text="p.name" onaftersave="updatePerson(p.id, p.name, p.dohickey)">{{p.name}}</a>
</div>并使用提供的ID值仅更新person的name和dohickey字段。当然,您必须更改updatePerson()方法,以期望ID作为第一个参数,名称和dohickey作为第二个和第三个参数。
还要注意,如果像我在这里所做的那样,使用onBeforeSave而不是onAfterSave,那么p.name还没有新值,您需要返回到使用$data来获取新值。
https://stackoverflow.com/questions/23418753
复制相似问题