2016-11-08 204 views
-1

所以我想要做的是从客户端更新,并在后端更新。我正在使用MEAN堆栈来完成此操作。目前,我可以获取我想要更新的单个项目的ID,但无法弄清楚我缺少更新数据库中的项目。MEAN堆栈更新函数

这里是我的HTML代码:

<h1>Sorting Books</h1> 
<div ng-init="getBooks()"></div> 
<p><input type="text" ng-model="test" placeholder="Search..."></p> 
<p><select ng-model="category" ng-options="x for x in categoryNames">Category</select></p> 
eBook: <input type="checkbox" ng-model="eBook"> 

<ul ng-repeat="book in allTheBooks | filter:test | filter:category | filter: eBook"> 
<li><strong>Title: </strong><span editable-text="book.title" e-name="name" e-form="editableForm" e-required>{{book.title}}</span></li> 
<ul> 
    <li><strong>Category: </strong><span editable-text="book.category" e-name="name" e-form="editableForm" e-required>{{book.category}}</span></li> 
    <li><strong>eBook: </strong><span editable-text="book.eBook" e-name="name" e-form="editableForm" e-required>{{book.eBook?'Yes':'No'}}</span></li> 
    <li><strong>Volume: </strong><span editable-text="book.volume" e-name="name" e-form="editableForm" e-required>{{book.volume}}</li> 
    <li><strong>Author: </strong><span editable-text="book.author" e-name="name" e-form="editableForm" e-required>{{book.author}}</li> 
    <li><strong>Genre: </strong><span editable-text="book.genre" e-name="name" e-form="editableForm" e-required>{{book.genre}}</li> 
    <li><strong>Stars: </strong><span editable-text="book.stars" e-name="name" e-form="editableForm" e-required>{{book.stars}}</li> 
    <li><strong>Comments: </strong><span editable-text="book.comments" e-name="name" e-form="editableForm" e-required>{{book.comments}}</li> 
    <li><button type="button" ng-click="deleteBook(book._id)">Delete</button></li> 
    <li> 
    <form editable-form name="editableForm" onaftersave="saveUser()"> 
    <div> 
    <button type="button" class="btn btn-default" ng-click="editableForm.$show(); update(book._id);" ng-show="!editableForm.$visible">Edit</button> 
    <span ng-show="editableForm.$visible"> 
     <button type="submit" class="btn btn-primary" ng-disabled="editableForm.$waiting">Save</button> 
     <button type="button" class="btn btn-default" ng-disabled="editableForm.$waiting" ng-click="editableForm.$cancel()">Cancel</button> 
    </span> 
    </div> 
    </form> 
    </li> 
</ul> 
</ul> 

这里是我的script.js代码:

$scope.update = function(id){ 
console.log('figuring things out... ' , id); 

};//end of Update 

现在有了这个我已经尝试了多种不同的东西,$ scope.book.title,等等,但给出'不能读取属性'标题'未定义'的错误。'

这里是我的app.js代码:

app.put('/bookUpdate/:id', function (req, res) { 
var bookId = req.params.id; 
console.log('from app.js ' , bookId); 
});//end of app.update function 

我开到什么真的,我已经尝试了多种不同的东西几乎没有成功。让我知道你是否需要更多的代码说明。

在此先感谢!

-Maykid

+0

如果你是在一个循环,allTheBooks是一个数组,“书”是NG重复内的局部变量,你的更新功能应该作为PARAM整个“书”对象:更新(书)。不只是身份证。无论如何,这看起来很乱。你为什么不直接编辑一个单独的记录来代替这个ng-repeat混乱 – yBrodsky

+0

你正在使用哪个版本的x-editable? – georgeawg

回答

0

不是传递idupdate功能,通过全book对象:

$scope.update = function(book){ 
    var url = BASE + "/bookUpdate/" + book._id; 
    $http.put(url, book).then(function onSuccess(response) { 
     console.log("Success"); 
    }).catch(function onReject(errorResponse) { 
     console.log(errorResponse.status); 
     throw errorResponse; 
    }); 
}; 

ng-repeat指令为每个项目创建子范围。 book对象放置在这些子范围上。因此,使用book作为参数ng-clickng-submit中的函数。