具有保存值的$resource回调

$resource callback with saved value

本文关键字:resource 回调 保存      更新时间:2023-12-13

我刚开始使用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的源代码-保存方法不会更新插入的对象。在我解决了这个"小"问题后,这位和平使者的榜样发挥了巨大的作用。

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

TodoFactorysave方法不会更新$scope.item,而是以保存的对象为参数调用回调函数,该函数包含新的id。

所以你必须更换

$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 
    });
};

带有

$scope.addTodo = function () {
    TodoFactory.save($scope.item, function (savedTodo) {
        // Success
        console.log(savedTodo);
        $scope.todos.push(savedTodo);
        $scope.item = {};
    },
    function () {
        // Error 
    });
};

这种行为记录在ngResource中$资源

这应该可以解决问题。

$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 
});
};