mercredi 16 mars 2016

AngularJs binding model attribute to checkbox

I am trying to assign some tags on post creation. I have a Post model that looks like this:

var mongoose = require('mongoose');

var PostsSchema = {
    title: String,
    content: String,
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Users'
    },
    comments: [{
        text: String,
        postedBy: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Users'
        },

    }],

    tags: [String]

};

I am trying to bind the some checkboxes to the 'tags' array attribute in the Post.

This how my post router looks like:

///* Create post */
postRouter.route('/').post(function (req, res) {

        mongoose.createConnection('localhost', 'CMS');
        console.log(req.body);

        var post = {
            title: req.body.title,
            content: req.body.content,
            tags: req.body.tags

        };

        if (typeof req.body.title === "undefined" || typeof req.body.content === "undefined")
        {
            res.json({message:"Error"});
        }else
        {
        var newPost = new Posts(post);
        newPost.save(function (err, post) {
            if (err) res.json({message:"Error"});
            res.json(post);
        });
        }

});

My controller looks like:

$scope.createPost = function(post){
        postService.createPost(post);
        postService.getPosts()
            .then(modelPosts);
    }

And my view look like:

div(ng-controller='postController') 
h2 Create Post
                    form
                        div.form-group
                            label(for='title') Title
                                input(type='text', class='form-control', id='title', name='title', placeholder='Title', ng-model='newpost.title', autofocus)
                        div.form-group
                            label(for='password') Content
                                input(type='text', class='form-control', id='content', name='content', placeholder='content', ng-model='newpost.content')
                    div(ng-controller='tagController')
                        h2 Tags
                        div( ng-model='Tags', ng-init='getTags()')
                            ul( ng-repeat='tag in Tags')
                                li
                                    label
                                        input(ng-model='newpost.tag',value='{{tag.name}}', type='checkbox', name='tag[]')
                                        span {{tag.name}}
                    button( ng-click='createPost(newpost)', class='btn btn-small btn-primary') Create Post

I am not sure what is the problem with the binding my view to the model. Tags are rendered and checkboxes are created , but when i check one checkbox , all of them get checked.




Aucun commentaire:

Enregistrer un commentaire