Cod*_*001 5 angularjs angular-resource angularjs-directive angularjs-scope
我创建了一个显示数据的指令.我可以将它包含在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();
}
}
};
})
Run Code Online (Sandbox Code Playgroud)
与该指令关联的html包括:
<p><input type="text" ng-model="data.assignee" ng-change="save()">
Run Code Online (Sandbox Code Playgroud)
这是指令的使用方式:
<div ng-repeat="item in data">
<action model="item" />
</div>
Run Code Online (Sandbox Code Playgroud)
这是一个显示其他背景的小提琴.您可以看到基本指令使用一些虚假数据.API调用的代码已注释掉.
同样,当scope.data.$save();线路取消注释时会出现问题.当ng-repeat中显示的项目尝试保存时,它将从显示的项目列表中消失,替换为带有空白字段的项目.当我重新加载整个应用程序时,我看到API保存成功,现在项目正确显示.
我怀疑发生的事情是保存调用对正确的项目进行操作,但不知何故用一个新的空白替换更改的项目,可能是由于原型继承.然后保存会导致更新父作用域,该作用域重新绘制列表并显示新的消隐项.
有人可以澄清发生了什么以及如何解决它?
我认为您会发现对您的$save()命令的 HTTP 响应返回空数据。
这就是$resource工作原理。当您调用 时$save(),它将(默认情况下)使用 HTTP POST 调用您的 REST 服务。响应预计是资源的服务器状态。然后将结果复制到您的对象。在这种情况下,我猜测您的 REST 服务返回一个空对象。
换句话说,如果您发送正文为 的 POST {name: 'foo'},您期望服务器的响应类似于{id: 44, name: 'foo', extraInfoServerCreated: 'bar'}。
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |