vue基于父子组件的发表评论案例

    技术2022-07-11  86

    <!DOCTYPE html>

    <html lang="en">

     

    <head>

        <meta charset="UTF-8">

        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <title>Document</title>

        <script src="../vue.js"></script>

        <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.css">

    </head>

     

    <body>

        <div id="app">

     

            <cmt-box @func="loadComments"></cmt-box>

     

            <ul class="list-group">

                <li class="list-group-item" v-for="item in list" :key="item.id">

                    <span class="badge">评论人:{{ item.user }}</span>

                    {{ item.content}}

                </li>

     

            </ul>

        </div>

        <template id="tmpl">

            <div>

                <div class="form-group">

                    <label for="">评论人:</label>

                    <input type="text" class="form-control" v-model="user">

                </div>

                <div class="form-group">

                    <label for="">评论内容:</label>

                    <textarea class="form-control" v-model="content"></textarea>

                </div>

                <div class="form-group">

                    <input class="btn btn-primary" @click="postComment" type="button" value="发表评论">

                </div>

            </div>

        </template>

     

        <script>

            var commentBox = {

                data() {

                    return {

                        user: '',

                        content: ''

                    }

                },

                template: '#tmpl',

                methods: {

                    postComment() {

                        var comment = {

                            id: Date.now(),

                            user: this.user,

                            content: this.content

                        }

     

                        var list = JSON.parse(localStorage.getItem('cmts') || '[]')

     

                        list.unshift(comment)

     

                        localStorage.setItem('cmts', JSON.stringify(list))

     

                        this.user = this.content = ''

     

                        this.$emit('func')

                    }

                }

            }

     

            var vm = new Vue({

                el: '#app',

                data: {

                    list: [{

                            id: Date.now(),

                            user: 'danny',

                            content: 'adgagd'

                        },

                        {

                            id: Date.now(),

                            user: 'love',

                            content: 'adfggd'

                        },

                        {

                            id: Date.now(),

                            user: 'jennis',

                            content: 'adfgagd'

                        }

                    ]

                },

                created(){

                    this.loadComments()

                },

                methods: {

                    loadComments(){

                        var list = JSON.parse(localStorage.getItem('cmts') || '[]')

                        this.list = list

                    }

                },

                components: {

                    'cmt-box': commentBox

                }

            })

        </script>

    </body>

     

    </html>

    Processed: 0.012, SQL: 9