首頁 > 軟體

vue元件實現發表評論功能

2022-04-15 16:00:23

本文範例為大家分享了vue元件實現發表評論的具體程式碼,供大家參考,具體內容如下

今天看了vue相關的視訊,所以跟著做一個小demo把知識串聯起來,內容很簡單但是也算是學習道路上的一點進步。

1 思路分析

發表評論模組寫入一個元件,提高複用性。
關鍵點:

1)、子元件通過localStorage向父元件傳值
2)、子元件有自己的data儲存user和content,即評論人和評論內容,也就是dom元素繫結的資料。
3)、點選‘發表評論’後,首先是將各條評論存入localStorage,然後通過在元件出繫結的函數呼叫父元件中的loadComments()載入評論。
4)、vue生命週期的熟悉。在created()中寫入loadComments(),每次頁面載入就會載入評論資料。

2 原始碼

需要vue.js和bootstrap.js兩個檔案

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="../lib/vue.js"></script>
    <link rel="stylesheet" href="../lib/bootstrap.css">
    <style>
    li{
        list-style:none;
    }
    </style>
</head>
<body>
    <div id="app">
        <com @func="loadComments"></com>
        <ul class="list-group">
            <li class="list-group-item" v-for="item in list">
                {{item.content}}<span class="badge">{{item.user}}</span>
            </li>
        </ul>
    </div>
        <!-- 評論區元件 -->
    <template id="tmp">
        <div>
            <div class="form-group"><label>評論人</label><input class="form-control" id="user" v-model:value="user"/></div>
             <div class="form-group"><label>評論內容</label><input class="form-control" id="content" v-model:value="content"/></div>   
                <div><input type="button" class="btn btn-primary" value="發表評論" @click="postComments"/></div>
        </div>
    </template>
    <script>
    var tmp={
        template:"#tmp",
        data:function(){
            return {
                user:'',
                content:''
            }
        },
        methods:{
            postComments(){
                var comment={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:[]
        },
        created(){
           this.loadComments();
        },
        methods:{
            loadComments(){
                this.list=JSON.parse(localStorage.getItem('cmts')||'[]');
            }
        },
        components:{
            'com':tmp
        }
        
    });
    </script>
</body>
</html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com