我有一个基本的CRUD应用程序,我的主要问题是删除功能。
角度控制器调用$ http动作
'use strict';
(function(){
var app = angular.module('JournalApp', [])
.controller('JournalController', function($scope, $http){
var loadEntries = function(){
$http.get('/api/entry')
.then(function(response){
$scope.entries = response.data;
if(response.data.noEntries){
$scope.entries.noEntries = true;
};
});
};
loadEntries();
//Create new Journal Entry
$scope.addEntry = function(entry){
var data = ({
hours: entry.hours,
notes: entry.notes
});
$http.post('/api/entry', data);
loadEntries();
};
//Delete Journal Entry
$scope.delEntry = function(item){
$http({
method: 'DELETE',
url: '/api/entry',
// data: item,
data: {date: item.date},
headers: {'Content-Type': 'application/json;charset=utf8'}
}, loadEntries());
};
});
})();
路由到我的服务器端处理程序
//GET Request
this.getEntries = function(req, res){
journal.find().sort({date: -1}).toArray(function(err, doc){
if(err) throw err;
if(doc.length){
console.log('found entries');
res.json(doc);
} else {
console.log('Returning no Entries.')
res.json(({ "noEntries": true }));
}
})
};
//Post Request
this.addEntry = function(req, res){
console.log('Adding new entry...');
var time = new Date();
var notation = req.body.notes || 'n/a'
journal.insert({ hours: req.body.hours, notes: notation, date: new Date()})
};
//Delete Request
this.deleteEntry = function(req, res){
journal.findOne({"date": new Date(req.body.date)}, function(err, data){
if(err) throw err;
console.log('Removing item _id: ' + data._id);
journal.remove({"date": data.date});
});
};
}
module.exports = entryHandler;
我可以通过mongo(和console.log)验证该条目已被删除,并且一切正常。但是$ http回调不会触发。回调函数(loadEntries)即时用于刷新页面上的日志。
当我将代码编写为
时,我可以触发回调$http.delete('/api/entry', item).then( function(){ loadEntries() } );
但是,当我使用此方法时,服务器端处理程序无法正常工作。
有没有更好的方法可以在没有大量额外模块的情况下实现这一目标?在我开始为我工作的地方添加软件包之前,我会先学习基础知识。
编辑:
我尝试添加.then(function(){loadEntries()});我的角度代码,它不起作用。
答案 0 :(得分:2)
您需要在$ http调用上调用.then来执行回调函数:
$http({
method: 'DELETE',
url: '/api/entry',
// data: item,
data: {date: item.date},
headers: {'Content-Type': 'application/json;charset=utf8'}
}).then(function() {
loadEntries()
});
答案 1 :(得分:0)
无论我尝试什么,我都无法成功拨回电话。但是我的目标是从我的应用程序中删除div,所以我只使用了角度ng-show / hide指令来完成此任务。
答案 2 :(得分:0)
除了.then()之外,看起来服务器代码没有返回任何调用完成状态,例如类似于C#
中的 - Ok / BadRequest(IHTTPctionResult类型)的成功/失败