当前位置: 首页 > news >正文

vue 组件评论 的同时进行刷新

注意:
1.最重要理解这里的父组件的刷新功能,通过v-on事件绑定委托给子组件执行,因为子组件的提交按钮和父组件的刷新评论的功能是分开的。

2.没有数据时直接点击提交按钮时会出bug,并且关闭后重新加载页面还是会存在。因为localStorage在浏览器中是永久缓存的,通过localStorage清除缓存,如下 。最后的执行效果,会有演示,本来可以做出判断为空时,不给提交,这里为了说明这个问题

window.οnunlοad=function(){
        localStorage.clear();
}

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../lib/vue.js"></script>
    <link rel="stylesheet" href="../lib/bootstrap.css">
</head>
<body>
      <div id="app">
          
          <cmtbox v-on:flash="loadComment"></cmtbox>
          <!--将父组件的方法委托给子组件-->
 
          <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 }}
                  <!--badge:徽章-->
              </li>
          </ul>
      </div>
 
      <template id="tmp">
          <div>
              <div class="form-group">
                  <label>发表人:</label>
                  <input type="text" class="form-control" v-model="user">
              </div>
              
              <div class="form-group">
                  <label>留言内容:</label>
                  <textarea class="form-control" v-model="content"></textarea>
              </div>
               
              <div class="form-group">
                  <input type="button" value="发表" class="btn btn-primary" @click="submit">
              </div>
          </div>
      </template>
      
      <script>
 
          window.onunload=function(){
              localStorage.clear();
          };
          //因为localStorage在浏览器中是永久缓存的,关闭后重新加载页面还是会存在先前的数据,特添加此项
          
          var commentBox = {
            template:'#tmp',
            //  通过id绑定后,直接将组件的内容在<template>定义,更加简单直观
            data(){
                return {
                    user:'',
                    content:'',
                }
            },
            methods:{
                submit(){
                    var comment = { id:Date.now(), user:this.user,content:this.content};
                    //实例化一个新的数组对象
                    
                    var list = JSON.parse(localStorage.getItem('cmts') || '[]');
                    //从localStorage中获取数据
                    list.unshift(comment);
                    //添加在最上端
                    localStorage.setItem('cmts',JSON.stringify(list));
                    //加入更新的对象后,重新刷新localStorage数据
                    
                    this.user = this.content = '';
                    
                    this.$emit('flash');
                    //触发父组件委托的方法
                }
                //发表评论的方法
            }  
          };
          
          var vm = new Vue({
             el:'#app',
             data:{
                 list:[
                     { id:1,user:'陈小帅',content:'马克·吐恩说过:'},
                     { id:2,user:'陈xiao帅',content:'一个拿着棒槌的人'},
                     { id:3,user:'陈大帅',content:'看什么都像钉子'}
                 ]
             },
              components:{
                 'cmtbox':commentBox
                  //将组件命名    
              },
              methods:{
                 loadComment(){
                     var list = JSON.parse(localStorage.getItem('cmts') || '[]');  
                     this.list = list;
                 }
              },
                  created(){
                     this.loadComment();
                  }
          });
      </script>
</body>
</html>

转载   https://blog.csdn.net/qq_42036616/article/details/82955967

转载于:https://www.cnblogs.com/Alitar/p/10836495.html

相关文章:

  • 使用 Python* 的英特尔® 分发版实现 Unity* 机器学习入门(第 1 部分)
  • 与图论的邂逅06:dfs找环
  • 数据结构实验三题目一
  • [小梅的体验课堂]Microsoft edge canary mac版本体验
  • Runtime整理(二)对象、类分析
  • java版 spring cloud+spring boot+redis社交电子商务平台-整合企业架构的技术点
  • new Date()的参数
  • webpack4.x实战一,安装与简单入门
  • go语言中单元测试的加深版本
  • NFS服务安装
  • 重学前端学习笔记(十六)--HTML元信息类标签
  • 浅谈设计模式
  • 学习Pushlet(一):下载及运行demo
  • 浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源
  • 小程序 模板和组件的使用和区别
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 2017-08-04 前端日报
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Angular 响应式表单之下拉框
  • HTTP中GET与POST的区别 99%的错误认识
  • java取消线程实例
  • laravel 用artisan创建自己的模板
  • Nodejs和JavaWeb协助开发
  • React 快速上手 - 07 前端路由 react-router
  • redis学习笔记(三):列表、集合、有序集合
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • ucore操作系统实验笔记 - 重新理解中断
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 线性表及其算法(java实现)
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 阿里云移动端播放器高级功能介绍
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​水经微图Web1.5.0版即将上线
  • #define 用法
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (3)nginx 配置(nginx.conf)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (汇总)os模块以及shutil模块对文件的操作
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)创业的注意事项
  • (转)一些感悟
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net refrector
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net对接阿里云CSB服务
  • .NET中winform传递参数至Url并获得返回值或文件