Vue-Day 02 小案例练习

一.点击切换类小案例

Vue-Day 02 案例分享 - 图1

  1. <template>
  2. <div>
  3. <!-- 请实现,点击h1标签,字体变大变红,再点击恢复原状 -->
  4. <h1 :class="{ big: isBig }" @click="isBig = !isBig">hello world</h1>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. isBig: false,
  12. };
  13. },
  14. };
  15. </script>
  16. <style>
  17. .big {
  18. color: red;
  19. font-size: 100px;
  20. }
  21. </style>

二.成绩增删案例

Vue-Day 02 案例分享 - 图2

Vue-Day 02 案例分享 - 图3

  1. <!--
  2. 1.循环列表 v-for 显示到页面上
  3. 2.引入 moment 模块 format 修改时间
  4. 3.新增效果 给表单增加一个提交事件 提交数据 列表显示一条数据 push v-model 数据双向绑定
  5. 检查学科是否为空 新增完毕 重置清空表单
  6. 4.删除效果 index splice(index,1)
  7. 存在的问题 当显示全删除之后id不存在 会出现报错 需要对id进行判断
  8. -->
  9. <template>
  10. <div class="container-fluid p-3">
  11. <div class="row">
  12. <div class="col-8">
  13. <table class="table table-bordered text-center">
  14. <!-- 表格标题部分 -->
  15. <thead class="table-light">
  16. <tr>
  17. <th scope="col">编号</th>
  18. <th scope="col">科目</th>
  19. <th scope="col">成绩</th>
  20. <th scope="col">考试时间</th>
  21. <th scope="col">操作</th>
  22. </tr>
  23. </thead>
  24. <!-- 表格内容 -->
  25. <tbody>
  26. <!-- 循环列表 -->
  27. <tr v-for="(item,index) in subjectList" :key="item.id">
  28. <th scope="row">{{item.id}}</th>
  29. <td>{{item.name}}</td>
  30. <td :class="{warning:item.score<60}">{{item.score}}</td>
  31. <td>{{format(item.date)}}</td>
  32. <td>
  33. <button type="button" class="btn btn-link" @click="delSubject(index)">删除</button>
  34. </td>
  35. </tr>
  36. <!-- <tr>
  37. <th scope="row">1</th>
  38. <td>数学</td>
  39. <td>100</td>
  40. <td>2022-06-01 00:00:00</td>
  41. <td>
  42. <button type="button" class="btn btn-link">删除</button>
  43. </td>
  44. </tr> -->
  45. <!-- 总分,平均分 -->
  46. <tr>
  47. <td colspan="5">
  48. <span>总分:0</span>
  49. <span class="ms-5">平均分:0</span>
  50. </td>
  51. </tr>
  52. </tbody>
  53. </table>
  54. </div>
  55. <!-- 新增学科 -->
  56. <div class="col-4">
  57. <!-- 在表单里 可以给表单绑定提交submit事件啊 -->
  58. <form class="container-fluid" @submit.prevent="addSubject" autocomplete="off" >
  59. <div class="row mb-3">
  60. <label for="inputSubject" class="col-sm-3 col-form-label">科目</label>
  61. <div class="col-sm-9">
  62. <input type="text" class="form-control" id="inputSubject" placeholder="请输入科目" v-model="subject" />
  63. </div>
  64. </div>
  65. <div class="row mb-3">
  66. <label for="inputScore" class="col-sm-3 col-form-label">分数</label>
  67. <div class="col-sm-9">
  68. <input type="number" class="form-control" id="inputScore" placeholder="请输入分数" v-model="score"/>
  69. </div>
  70. </div>
  71. <div class="row">
  72. <div class="col-9 offset-3">
  73. <!-- 给添加按钮绑定点击事件 但是在表单里 可以给表单绑定提交submit事件啊 -->
  74. <button type="submit" class="btn btn-primary">添加</button>
  75. </div>
  76. </div>
  77. </form>
  78. </div>
  79. </div>
  80. </div>
  81. </template>
  82. <script>
  83. // 引入 moment 模块
  84. import moment from 'moment';
  85. export default {
  86. data(){
  87. return{
  88. subjectList: [
  89. {
  90. id: 1,
  91. name: '语文',
  92. score: 56,
  93. date: new Date(),
  94. },
  95. {
  96. id: 2,
  97. name: '数学',
  98. score: 100,
  99. date: new Date(),
  100. },
  101. ],
  102. subject:'',
  103. score:'',
  104. }
  105. },
  106. methods:{
  107. format(date){
  108. return moment(date).format('YYYY-MM-DD HH:mm');
  109. },
  110. addSubject(){
  111. if(this.subject === ''){
  112. alert('科目不能为空');
  113. return;
  114. }
  115. const item = this.subjectList[this.subjectList.length -1]
  116. this.subjectList.push({
  117. id: item === undefined ? 1 : item.id + 1,
  118. // id:item.id+1,
  119. name: this.subject,
  120. score: this.score,
  121. date: new Date(),
  122. });
  123. this.subject = '';
  124. this.score = '';
  125. },
  126. delSubject(index){
  127. this.subjectList.splice(index,1);
  128. }
  129. }
  130. };
  131. </script>
  132. <style>
  133. .warning{
  134. color: red;
  135. }
  136. </style>

三.计算机属性的完整写法小案例

1.岁数的计算

Vue-Day 02 案例分享 - 图4

  1. <template>
  2. <div>
  3. <span>年龄{{age}}</span>
  4. <button @click="age = age + 1">+1 岁</button>
  5. <h3>出生年份:{{year}}</h3>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. name: 'App',
  11. data(){
  12. return{
  13. year:2000,
  14. };
  15. },
  16. computed:{
  17. age:{
  18. get(){
  19. const date = new Date();
  20. return date.getFullYear() - this.year;
  21. },
  22. set(newAge){
  23. console.log(newAge);
  24. const date = new Date();
  25. this.year =date.getFullYear() - newAge;
  26. }
  27. }
  28. }
  29. }
  30. </script>
  31. <style>
  32. </style>

2.全选案例

Vue-Day 02 案例分享 - 图5

  1. <template>
  2. <div>
  3. 全选:<input type="checkbox" v-model="allChecked"><button class="btn btn-primary btn-sm ms-2" @click="btn">反选</button>
  4. <ul>
  5. <!-- 渲染列表 -->
  6. <li v-for="item in list" :key="item.name">
  7. <input type="checkbox" v-model="item.checked">{{item.name}}
  8. </li>
  9. </ul>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. data(){
  15. return{
  16. list:[
  17. {
  18. name: "猪八戒",
  19. checked: false,
  20. },
  21. {
  22. name: "孙悟空",
  23. checked: false,
  24. },
  25. {
  26. name: "唐僧",
  27. checked: false,
  28. },
  29. {
  30. name: "白龙马",
  31. checked: false,
  32. },
  33. ]
  34. }
  35. },
  36. computed:{
  37. allChecked:{
  38. get(){
  39. // 默认全选
  40. let all = true;
  41. // 遍历列表,如果有一项没有选中,就把全选设置为false
  42. this.list.forEach((i)=>{
  43. if(i.checked === false){
  44. all = false
  45. }
  46. });
  47. return all;
  48. },
  49. // 更新 点击全选
  50. set(all){
  51. this.list.forEach((i)=>{
  52. i.checked = all;
  53. });
  54. }
  55. }
  56. },
  57. methods:{
  58. //反选 取反
  59. btn(){
  60. this.list.forEach((i)=>{
  61. i.checked = !i.checked;
  62. });
  63. }
  64. }
  65. }
  66. </script>
  67. <style>
  68. </style>