利用Vue.js实现简单的留言板功能

缺乏、安全感 2022-12-22 09:55 348阅读 0赞

此案例主要实现点击发送留言的按钮,将我们的留言以及留言人的信息展示在留言板上,下面就是具体的步骤:


一 、搭建整个留言板页面结构

  1. 为了页面整体效果稍微好看一点,此案例运用bootstrap框架对页面表单结构进行渲染
  2. 利用前面学过的Vue组件将表单结构渲染出来

(指路忘记组件知识的同学—>组件的创建)

  1. <div id="app">
  2. <cmt-box></cmt-box>
  3. <template id="temp1">
  4. <div>
  5. <div class="form-group">
  6. <label for="">留言人</label>
  7. <input type="text" name="" id="" class="form-control">
  8. </div>
  9. <div class="form-group">
  10. <label for="">留言内容</label>
  11. <input type="text" name="" id="" class="form-control">
  12. </div>
  13. <div class="form-group">
  14. <input type="button" value="发送留言" class="btn btn-primary">
  15. </div>
  16. </div>
  17. </template>
  18. <ul class="list-group">
  19. <li class="list-group-item">Item 1</li>
  20. <li class="list-group-item">Item 2</li>
  21. <li class="list-group-item">Item 3</li>
  22. </ul>
  23. </div>
  24. <script> var mycon1={ template:'#tmp1' } new Vue({ el:'#app', data:{ }, methods:{ }, components:{ 'cmt-box':mycon1 } }) </script>

整个页面展示如下:
在这里插入图片描述
二 、将上面的一些假数据 (item1)删掉,利用v-for指令将数据遍历出来并显示在表单里

  1. <div id="app">
  2. <cmt-box></cmt-box>
  3. <ul class="list-group">
  4. <li class="list-group-item" v-for="item in list" :key="item.name">
  5. <div class="pane panel-info">
  6. <div class="panel-heading">
  7. <h3 class="panel-title">{
  8. {item.userName}}:{
  9. {item.id}}</h3>
  10. </div>
  11. <div class="panel-body">
  12. {
  13. {item.content}}
  14. <span class="label label-info pull-right">未读留言</span>
  15. </div>
  16. </div>
  17. </li>
  18. </ul>
  19. </div>
  20. <script> new Vue({ el:'#app', data:{ list:[ { id:new Date(),userName:'迪丽热巴',content:'三生三世枕上书'}, { id:new Date(),userName:'郑秀晶',content:'继承者'}, { id:new Date(),userName:'宋茜',content:'风起洛阳'}, ] }, methods:{ }, components:{ 'cmt-box':mycon1 } }) </script>

效果如下:
在这里插入图片描述
三 、 获取留言人信息和留言,并将其显示在表单中

  1. 在子组件中利用v-model指令进行双向绑定,实现获取数据信息,并在子组件中加入相应的属性data
  2. 给发送留言按钮绑定点击事件,实现发送内容的功能,同时在子组件中加入相应的属性methods
  3. 同时实现子组件向父组件传递方法,将数据信息传递给父组件中的list中去

(忘记父子组件之间的如何通信的同学指路—>组件之间的通信)

  1. <div id="app">
  2. <cmt-box @func='refresh'></cmt-box>
  3. </div>
  4. <template id="temp1">
  5. <div>
  6. <div class="form-group">
  7. <label for="">留言人</label>
  8. <input type="text" name="" id="" class="form-control" v-model='msgSonData.userName'>
  9. </div>
  10. <div class="form-group">
  11. <label for="">留言内容</label>
  12. <input type="text" name="" id="" class="form-control" v-model='msgSonData.content'>
  13. </div>
  14. <div class="form-group">
  15. <input type="button" value="发送留言" @click='postContent' class="btn btn-primary">
  16. </div>
  17. </div>
  18. </template>
  19. <script> var mycon1={ template:'#temp1', data(){ return{ msgSonData:{ userName:'', content:'', } } }, methods:{ postContent(){ // console.log(this.msgSonData.name); this.$emit('func',this.msgSonData) } } } new Vue({ el:'#app', data:{ newSonData:'', list:[ { id:new Date(),userName:'迪丽热巴',content:'三生三世枕上书'}, { id:new Date(),userName:'郑秀晶',content:'继承者'}, { id:new Date(),userName:'宋茜',content:'风起洛阳'}, ] }, methods:{ refresh(data){ // console.log(data); this.newSonData=data; this.newSonData['id'] = new Date(); this.list.push(this.newSonData); } }, components:{ 'cmt-box':mycon1 } }) </script>

效果如下:
当我们输入留言信息之后点击发送留言:
在这里插入图片描述
大功告成!!!


完整代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <script src="./lib/vue-2.4.0.js"></script>
  8. <link rel="stylesheet" href="./lib/bootstrap-3.3.7.css">
  9. </head>
  10. <body>
  11. <div id="app">
  12. <cmt-box @func='refresh'></cmt-box>
  13. <ul class="list-group">
  14. <li class="list-group-item" v-for="item in list" :key="item.name">
  15. <div class="pane panel-info">
  16. <div class="panel-heading">
  17. <h3 class="panel-title">{
  18. {item.userName}}:{
  19. {item.id}}</h3>
  20. </div>
  21. <div class="panel-body">
  22. {
  23. {item.content}}
  24. <span class="label label-info pull-right">未读留言</span>
  25. </div>
  26. </div>
  27. </li>
  28. </ul>
  29. </div>
  30. <template id="temp1">
  31. <div>
  32. <div class="form-group">
  33. <label for="">留言人</label>
  34. <input type="text" name="" id="" class="form-control" v-model='msgSonData.userName'>
  35. </div>
  36. <div class="form-group">
  37. <label for="">留言内容</label>
  38. <input type="text" name="" id="" class="form-control" v-model='msgSonData.content'>
  39. </div>
  40. <div class="form-group">
  41. <input type="button" value="发送留言" @click='postContent' class="btn btn-primary">
  42. </div>
  43. </div>
  44. </template>
  45. <script> var mycon1={ template:'#temp1', data(){ return{ msgSonData:{ userName:'', content:'', } } }, methods:{ postContent(){ // console.log(this.msgSonData.name); this.$emit('func',this.msgSonData) } } } new Vue({ el:'#app', data:{ newSonData:'', list:[ { id:new Date(),userName:'迪丽热巴',content:'三生三世枕上书'}, { id:new Date(),userName:'郑秀晶',content:'继承者'}, { id:new Date(),userName:'宋茜',content:'风起洛阳'}, ] }, methods:{ refresh(data){ // console.log(data); this.newSonData=data; this.newSonData['id'] = new Date(); this.list.push(this.newSonData); } }, components:{ 'cmt-box':mycon1 } }) </script>
  46. </body>
  47. </html>

发表评论

表情:
评论列表 (有 0 条评论,348人围观)

还没有评论,来说两句吧...

相关阅读