AngularJS使用ng-model插入MongoDB/MongoDB中的数组
问题描述:
目前,我正在使用ng-model将数据插入到MongoDB中。有没有办法使用ng-model将数据插入MongoDB中的数组? 答案是一个数组,应该包含用户输入的4个字符串。我尝试添加[0],[1],[2],[3]到quiz.quizData.answers,但它没有以数组的形式正确输入数据。相反,它进入这样的:AngularJS使用ng-model插入MongoDB/MongoDB中的数组
"answers" : [
{
"0" : "My First Answer",
"1" : "My Second Answer"
}
],
的就应该是这样,而不是:
"answers" : [
"My First Answer",
"My Second Answer"
],
我的HTML输入表单:
<input type="text" name="answers" ng-model="quiz.quizData.answers" placeholder="enter answers here" required>
<input type="text" name="answers2" ng-model="quiz.quizData.answers" placeholder="enter other answers here" required>
我的终点
// POST request for users to post a new quiz entry
apiRouter.route('/quiz')
.post(function(req, res) {
// Create quiz object and assign to 'quiz'
var quiz = new Quiz();
// Contains the quiz question
quiz.question = req.body.question;
// Contains an array with four quiz answers
quiz.answers = req.body.answers;
// Contains one string that matches the correct answer from the array above
quiz.correctAnswer = req.body.correctAnswer;
// Identifies user creating the quiz
quiz.postedBy = req.body.postedBy;
// Identifies the category of the quiz
quiz.category = req.body.category;
// then save new quiz to database
quiz.save(function(err) {
// If an error occurs, display error message in JSON format
if (err) {
return res.json({ success: false, message: 'something went way wrong....' + err });
} else {
// If no error occurs and it saves, display success
res.json({ message: 'Quiz Created!' });
}
});
});
我的MongoDB的架构:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// post schema
var QuizSchema = new Schema({
question: { type: String, lowercase: true, required: true },
answers: { type: Array, required: true },
correctAnswer: { type: String, required: true },
category: { type: String, lowercase: true, required: true },
postedBy: { type: String, required: true }
});
module.exports = mongoose.model('Quiz', QuizSchema);
答
你可以只使用NG重复迭代如果你已经从一个空数组范围:
<input ng-repeat="i in [1,2,3,4]" type="text" name="answers{{i}}" ng-model="quiz.quizData.answers[i]" placeholder="enter answers here" required>
如果阵列已经存在,并且您想要考虑可变数组长度,您可以使用ng-repeat和$ index。确保你通过$指数添加曲目或你会遇到重复键的问题:
<input ng-repeat="answer in quiz.quizData.answers track by $index" type="text" name="answers{{$index}}" ng-model="quiz.quizData.answers[$index]" placeholder="enter answers here" required>
答
HTML
<input type="text" name="answer1" ng-model="answersArray[0]" placeholder="answer 1">
<input type="text" name="answer2" ng-model="answersArray[1]" placeholder="answer 2">
<input type="text" name="answer3" ng-model="answersArray[2]" placeholder="answer 3">
<input type="text" name="answer4" ng-model="answersArray[3]" placeholder="answer 4">
<input type="hidden" name="answers" ng-model="quiz.quizData.answers" placeholder="enter answers here" ng-init="quiz.quizData.answers = answersArray">
控制器
$scope.answersArray = [
answer1 = $scope.answer1,
answer2 = $scope.answer2,
answer3 = $scope.answer3,
answer4 = $scope.answer4
];
不幸的是,它创造了完全相同的问题;它将它作为一个对象插入到数组中,而不是数组中的四个字符串 –
您试过了哪个选项? – Wake
我尝试了两种选择。 –