vue使用localStorage持久性存储实现评论列表


Posted in Vue.js onApril 14, 2022

案例数据使用localStorage持久性存储 全局过滤器实现时间格式化

代码部分

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="../lib/vue.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" type="text/css" href="../node_modules/bootstrap/dist/css/bootstrap.css" rel="external nofollow"  />
    </head>
    <body>
        <div id="app">
            <div class="container">
                <div class="row">
                    <div class="col-md-6 offset-md-3">
                        <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 badge-pill badge-dark float-right">评论人:{{item.user}}</span>
                                <span class="float-right" style="position: relative;right: 60px;">{{ item.ctime | dateFormat() }}</span>
                                {{item.content}}
                            </li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>

        <template id="tmpl">
            
            <div>
                <div class="form-group">
                    <label for="comment">评论人:</label>
                    <input type="text" id="comment" class="form-control" v-model="user" />
                </div>
                
                <div class="form-group">
                    <label for="commentText">评论内容:</label>
                    <textarea id="commentText" class="form-control" v-model="content">
                
                    </textarea>
                </div>
                
                <div class="form-group">
                    <input type="button" value="发表评论" class="btn btn-primary" @click="postComment" />
                </div>
            </div>
            
        </template>


        <script type="text/javascript">
            
            // 全局过滤器 时间格式化
            // 所谓的全局过滤器,就是所有的VM实例都共享的
            Vue.filter('dateFormat',function(dateStr,pattern=""){
                 // 根据给定的时间字符串,得到特定的时间
                 
                var dt = new Date(dateStr)
                
                //   yyyy-mm-dd
                var year = dt.getFullYear()
                
                var month = (dt.getMonth() + 1).toString().padStart(2,'0')
                
                var day = dt.getDate().toString().padStart(2,'0')
                
                // return `${year}-${month}-${day}`
                
                if(pattern && pattern.toLowerCase() === 'yyyy-mm-dd'){
                    return `${year}-${month}-${day}`
                }else{
                    var hh = dt.getHours().toString().padStart(2,'0')
                    
                    var mm = dt.getMinutes().toString().padStart(2,'0')
                    
                    var ss = dt.getSeconds().toString().padStart(2,'0')
                    
                    return `${year}-${month}-${day} ${hh}:${mm}:${ss}`
                    
                }
                
            })
            
            var commentBox = {
                data() {
                    return {
                        user: '',
                        content: '',
                        ctime:new Date()
                    }
                },
                template: '#tmpl',
                methods: {
                    postComment() {
                        //  localStorage 只支持存放字符串数据, 要先调用 JSON.stringify 
                        //  在保存 最新的 评论数据之前,要先从 localStorage 获取到之前的评论数据(string), 转换为 一个  数组对象, 然后,把最新的评论, push 到这个数组
                        //  如果获取到的 localStorage 中的 评论字符串,为空不存在, 则  可以 返回一个 '[]'  让 JSON.parse 去转换
                        //  把 最新的  评论列表数组,再次调用 JSON.stringify 转为  数组字符串,然后调用 localStorage.setItem()

                        var comment = {
                            id: Date.now(),
                            user: this.user,
                            content: this.content,
                            ctime:this.ctime
                        }
                        
                        // 从 localStorage 中获取所有的评论
                        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: []
                },
                methods: {
                    loadComments() {
                        // 从本地的 localStorage 中,加载评论列表
                        var list = JSON.parse(localStorage.getItem('cmts') || '[]')

                        this.list = list

                    }
                },
                components: {
                    'cmt-box': commentBox
                },
                created() {
                    this.loadComments()
                }
            })
        </script>

    </body>
</html>

效果图

vue使用localStorage持久性存储实现评论列表

Vue.js 相关文章推荐
用vue设计一个日历表
Dec 03 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
Vue实现随机验证码功能
Dec 29 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
vue实现按钮切换图片
Jan 20 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 #Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 #Vue.js
vue elementUI表格控制对应列
Apr 13 #Vue.js
vue项目打包后路由错误的解决方法
Apr 13 #Vue.js
vue的项目如何打包上线
vue2的 router在使用过程中遇到的一些问题
Apr 13 #Vue.js
vue+elementUI实现表格列的显示与隐藏
Apr 13 #Vue.js
You might like
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
3
2006/10/09 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
python使用socket进行简单网络连接的方法
2015/04/29 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
python程序输出无内容的解决方式
2020/04/09 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
用python绘制樱花树
2020/10/09 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
Farah官方网站:男士服装及配件
2019/11/01 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
银行个人求职自荐信范文
2013/12/16 职场文书
技校毕业生自荐信
2014/06/03 职场文书
开展创先争优活动总结
2014/08/28 职场文书