我创建了一个显示数据的指令.我可以将它包含在ng-repeat中,并看到模型已连接.当我单击并返回页面时,数据将再次显示以前进行的更改.我使用ngResources从API加载数据.到目前为止,这么好:它按预期工作.
这是破坏的部分:如果我在我的指令中将数据保存到API,则该项目将从页面中消失(更具体地说,它的字段为空白).其余的项目仍然像以前一样.只有保存的更改.
这是指令:
.directive('action',function() { return { restrict: 'E',scope: { data:'=model' },templateUrl: 'modules/actions/view.tpl.html',replace: true,link: function(scope,element,attr) { scope.save = function() { console.log(" data to save:" + JSON.stringify(scope.data)); scope.data.$save(); } } }; })
与该指令关联的html包括:
<p><input type="text" ng-model="data.assignee" ng-change="save()">
这是指令的使用方式:
<div ng-repeat="item in data"> <action model="item" /> </div>
这是一个显示其他背景的fiddle.您可以看到基本指令使用一些虚假数据. API调用的代码已注释掉.
同样,当scope.data.$save();行未被注释.当ng-repeat中显示的项目尝试保存时,它将从显示的项目列表中消失,替换为带有空白字段的项目.当我重新加载整个应用程序时,我看到API保存成功,现在项目正确显示.
我怀疑发生的事情是保存调用对正确的项目进行操作,但不知何故用一个新的空白替换更改的项目,可能是由于原型继承.然后保存会导致更新父作用域,该作用域重新绘制列表并显示新的消隐项.
有人可以澄清发生了什么以及如何解决它?
我认为您将发现对$save()命令的HTTP响应返回空数据.
这就是$资源的运作方式.当你调用$save()时,它将(默认情况下)使用HTTP POST调用你的REST服务.响应应该是资源的服务器状态.然后将结果复制到您的对象.在这种情况下,我猜你的REST服务正在返回一个空对象.
换句话说,如果你发送一个{body:’foo’}正文的POST,你希望服务器的响应类似{id:44,name:’foo’,extraInfoServerCreated:’bar’}.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。