我需要帮助从嵌套数组中删除this
项。我尝试使用$http.delete
,但是这个方法从数据库中删除了整个ObjectID,第二个问题是我无法连接"删除"带有后端代码的按钮。
我的代码:
var product = new Schema({
title: String,
price: String,
description: [ObjectID]
});
的index.html
<form name="editProduct.descriptionForm" ng-submit="editProduct.updateDescription(newDescription, editProduct.descriptionForm.description.$valid)" novalidate>
<div ng-class="{ 'has-success':(editProduct.descriptionForm.description.$valid && !editProduct.descriptionForm.description.$pristine), 'has-error':(!editProduct.descriptionForm.description.$valid && !editProduct.descriptionForm.description.$pristine) || (!descriptionForm.description.$valid && descriptionForm.$submitted) }">
<div class="entry input-group" ng-repeat="item in newDescription track by $index">
<strong><input ng-disabled="editProduct.disabled" class="form-control" type="text" name="description" ng-model="newDescription[$index]" required></strong>
<span class="input-group-btn">
<a ng-click="editProduct.deleteDescription(item);" class="btn btn-remove btn-danger">
<span class="glyphicon glyphicon-remove"></span>
</a>
</span>
</div>
</div>
<br>
<button ng-disabled="editProduct.disabled" class="btn btn-primary" type="submit">Save</button>
</form>
routes.js
router.put('/editProduct', function(req, res){
var editProduct = req.body._id;
var options = { multi: true };
Product.findOneAndUpdate({ _id: editProduct }, { $pull: { description: req.params.description }}, options, function(err, product){
if(err) throw err;
if(!product){
res.json({ success: false, message: 'Product no found' });
} else {
product.update(function(err){
if(err){
console.log(err);
} else {
res.json({ success: true, message: 'Description removed!'})
}
});
};
});
});
我也尝试了以下方法:
Product.findOne({'_id' : product.id}, function(err, me){
for(var i=0; i<=me.description.length; i++){
if (String(me.description[i])==String(uid)){
me.description.remove(uid);
me.save();
}
}
});
我认为,最大的问题是我不知道如何将此功能连接到按钮。
答案 0 :(得分:1)
请在Mongoose更新查询之前尝试console.log(req.params.description)
并检查输出是否确实是有效的ObjectId。
如果控制台输出未显示有效的uid,则问题出在角度代码中。最有可能是editProduct.deleteDescription(item)
函数。通过传递正确的描述ID作为参数来检查您是否正在进行Http请求。这可能类似于item.descriptionId或item.id.彻底调试。