$资源没有更新视图

我有一个非常简单的资源如下:

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.$applyleave_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 ),但由于我不知道您的实现的确切细节,我刚刚提供了一个通用的解决方案。

链接地址: http://www.djcxy.com/p/89549.html

上一篇: $resource not updating the view

下一篇: AngularJS: How to send auth token with $resource requests?