带有保存值的$ resource回调

时间:2013-11-30 02:41:40

标签: javascript angularjs callback

我刚刚开始使用AngularJS,我喜欢它。

但是 - 我需要使用$ resource将项目保存到我的数据库,然后返回并返回包含数据库中新创建项目的值的对象(尤其是数据库分配的ID)。

我发现了一些描述这一点的文章 - 但它们似乎都不适合我:(

我的设置非常简单:

var app = angular.module("todoApp", ['ngResource', 'ngAnimate']);
app.factory("TodoFactory", function ($resource) {
    return $resource('.../api/todo/:id', { id: '@id' }, { update: { method: 'PUT' }});
});

var todoController = app.controller("TodoController", function ($scope, TodoFactory) {

$scope.todos = [];

init();

function init() {
    $scope.todos = TodoFactory.query();
}

$scope.addTodo = function () {
    TodoFactory.save($scope.item, function () {
        // Success
        console.log($scope.item); // <--- HERE'S MY PROBLEM
        $scope.todos.push($scope.item);
        $scope.item = {};
    },
    function () {
        // Error 
    });
};

但是当我调用TodoFactory.save时,$ scope.item不包含数据库中的Id属性 - 只有调用save时的值。

如何让我的设置返回包含所有数据库生成的值的更新对象?

如果有人能指出我正确的方向,我将非常感激:)

更新:我刚刚查看了我提供的API的源代码 - save-method不会更新插入的对象。 在我解决了这个“次要”问题后,和平人的榜样就像一个魅力。

很抱歉给大家带来不便 - 但非常感谢您的回复! :)

2 个答案:

答案 0 :(得分:0)

save的{​​{1}}方法不会更新TodoFactory,而是使用保存的对象作为参数调用回调函数,该参数包含新的ID。

所以你必须替换

$scope.item

$scope.addTodo = function () {
    TodoFactory.save($scope.item, function () {
        // Success
        console.log($scope.item); // <--- HERE'S MY PROBLEM
        $scope.todos.push($scope.item);
        $scope.item = {};
    },
    function () {
        // Error 
    });
};

此行为记录在ngResource.$resource

答案 1 :(得分:0)

这应该可以解决问题。

$scope.addTodo = function () {

// ADD IN A VARIABLE FOR THE RESPONSE DATA AS THE PARAMETER TO YOUR SUCCESS CALLBACK FN
TodoFactory.save($scope.item, function (responseItem) {  
    // Success
    console.dir(responseItem);   // <--- AND THEN USE IT
    $scope.todos.push(responseItem);
    $scope.item = {};
},
function () {
    // Error 
});
};