保存后项目消失

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保存成功,现在项目正确显示.

我怀疑发生的事情是保存调用对正确的项目进行操作,但不知何故用一个新的空白替换更改的项目,可能是由于原型继承.然后保存会导致更新父作用域,该作用域重新绘制列表并显示新的消隐项.

有人可以澄清发生了什么以及如何解决它?

Bri*_*sio 4

我认为您会发现对您的$save()命令的 HTTP 响应返回空数据。

这就是$resource工作原理。当您调用 时$save(),它将(默认情况下)使用 HTTP POST 调用您的 REST 服务。响应预计是资源的服务器状态。然后将结果复制到您的对象。在这种情况下,我猜测您的 REST 服务返回一个空对象。

换句话说,如果您发送正文为 的 POST {name: 'foo'},您期望服务器的响应类似于{id: 44, name: 'foo', extraInfoServerCreated: 'bar'}