$资源没有更新视图
我有一个非常简单的资源如下:
angular.module('ExampleServices', ['ngResource']).
factory('NoteService', function($q, $rootScope, $resource){
var baseurl = "/api/v1/note/";
var Note = $resource(baseurl, {}, {
// get notes method
get_for_model: {
method: 'GET',
params:{user: '', object_id: ''},
isArray: false
},
// leave note method
leave_note: {
method: 'POST',
}
});
return Note
}
);
在控制器中,我调用了leave_note
方法,如下所示:
$scope.note = function(){
$scope.note = NoteService.leave_note({
desc: desc,
title: title,
object_id: oid,
});
}
这基本上调用我的应用程序rest API的POST方法,并创建对象。 一旦页面刷新,我可以看到注释中列出的notes
。 但就我所知, $resource
应该自行更新视图。
从文档引用
认识到调用$ resource对象方法立即返回一个空引用(依赖于isArray的对象或数组)是很重要的。 一旦从服务器返回数据,现有参考将填入实际数据。
我无法使用$rootScope.$apply
在leave_note
方法中,直到我将其定义为一个函数(如下所示:)
leave_note: function(){
var note = New Note();
note.desc = desc;
note.title = title;
note.object_id = oid;
note.$save();
$rootScope.$apply();
}
但在上述情况下,发送给REST API的调用具有undefined
请求方法。
我能想到的另一个问题是,我没有$scope.note
定义,但有$scope.notes
这是通过REST API发送笔记列表。 所以也许$scope.note
正在更新,但由于我没有渲染note
对象,但在模板中使用ng-repeat
渲染notes
,我无法看到模板中的更改。
我还尝试在保存新笔记后重新获取笔记对象,但它基本上删除了所有笔记,然后重新呈现所有看起来很丑陋的笔记(几乎像刷新页面一样)。
我试图实现的是一旦保存了一个note
对象,我想要将这个新音符合并到现有的音符中。 请指导我。 谢谢
您不需要使用$rootScope.$apply
,您的小姐可以理解$resource
API文档。
正如$resource
文档中提到的那样:“一旦数据从服务器返回,现有参考就会填充实际数据。” 这意味着当你做$scope.notes = NoteService.get_for_model();
您要求$scope.notes
填充从NoteService.get_for_model
GET请求收到的(未来)数据。 $resource
API将负责完成此操作 - 更新$scope.notes
模型 - 仅此而已。 请注意,它没有提到您在同一服务上执行POST时会自动更新您的数据。
如果您想在添加新笔记(POST)后更新$scope.notes
模型,并且不想请求整个笔记列表,请尝试将新笔记直接添加到POST成功回调的$scope.notes
模型中:
var note = NoteService.leave_note({
desc: desc,
title: title,
object_id: oid,
}, function() {
$scope.notes.push(note.$get());
}
);
请注意,这可以大大改善(即避免$get
),但由于我不知道您的实现的确切细节,我刚刚提供了一个通用的解决方案。
上一篇: $resource not updating the view
下一篇: AngularJS: How to send auth token with $resource requests?