【问题标题】:AngularJS using ng-model to insert into an array in Mongoose/MongoDBAngularJS 使用 ng-model 插入 Mongoose/MongoDB 中的数组
【发布时间】:2016-08-12 00:44:34
【问题描述】:

目前,我正在使用 ng-model 将数据插入到我的 MongoDB 中。有没有办法使用 ng-model 将数据插入到 MongoDB 中的数组中? answers 是一个数组,应该包含用户输入的 4 个字符串。我尝试将 [0]、[1]、[2]、[3] 添加到 quiz.quizData.answers,但它没有正确输入数据作为数组。相反,它是这样输入的:

      "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);

【问题讨论】:

    标签: javascript angularjs arrays mongodb


    【解决方案1】:

    如果你从一个空数组开始,你可以使用 ng-repeat 迭代一个范围:

    <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。确保添加 track by $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>
    

    https://plnkr.co/edit/dwHIFTftgq5LFfTOpc9X?p=info

    【讨论】:

    • 不幸的是,它产生了完全相同的问题;它将它作为对象插入到数组中,而不是在数组中插入四个字符串
    • 您尝试了哪个选项?
    • 如果您的数组已经定义,它应该可以正常工作。对于第一个示例,quiz.quizData.answers = [] 将起作用。编辑帖子以反映这一点。
    • 我无法让它按照您描述的方式工作。但是,我能够找到解决方法。不确定这是否是一种不好的做法,但它确实完成了我想要的,所以我想它总比没有好。我所做的是在范围内创建一个数组。然后,我为用户放置了四个单独的输入表单,将每个表单绑定到我在作用域中创建的数组。然后,我使用 ng-init 将该数组推送到隐藏输入中,然后将其提交到数据库。
    • 你试过我添加到答案中的 plunker 吗?
    【解决方案2】:

    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
    ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 2017-02-10
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多