我刚刚开始使用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不会更新插入的对象。 在我解决了这个“次要”问题后,和平人的榜样就像一个魅力。
很抱歉给大家带来不便 - 但非常感谢您的回复! :)
答案 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
});
};