今天看了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>
Logo

前往低代码交流专区

更多推荐