💻博主现有专栏:
C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,设计模式、Python机器学习等
🥏主页链接:
目录
🎯本文目的
(一)掌握Vue.js中监听属性、计算属性的使用;
(二)通过学习计划表案例掌握Vue.js中指令的基本使用。
(三)掌握Vue.js中的样式绑定。
🎯猜数字游戏
🎃要求
要求:1、熟悉组件模版结构。
2、掌握如何用方法实时对文本框中的数据进行判断。
🎃代码解析
<template> <h1 align="center">软工</h1> <div id="box"> <p> <input type="text" placeholder="猜数游戏" v-model="val" v-on:input="guessed" /> </p> <p>{{ result }}</p> </div> </template> <script setup> import { ref } from 'vue' const val = ref('') const result = ref('请猜一个1~100之间的整数') const key = Math.round(Math.random() * 100) const guessed = () => { const num = parseInt(val.value); if (isNaN(num)) result.value = "请猜一个1~100之间的整数"; if (num > key) result.value = "太大了,往小一点猜!"; if (num < key) result.value = "太小了,往大一点猜!"; if (num === key) { result.value = "祝贺你,你猜对了!"; } } </script> <style scoped> div#box { width: 300px; margin: 30px auto; border: 1px solid #666; border-radius: 10px; padding: 10px; } input{font-size: 20px;} p { font-size: 20px; text-align: center; } </style>
这段代码是一个基于Vue.js的猜数游戏。它包括HTML模板、JavaScript逻辑和CSS样式。
HTML模板部分:
- 在`<template>`标签内,有一个标题和一个包含输入框和结果提示的容器。
- 输入框使用`v-model`指令绑定到`val`变量,用于获取用户输入的值。
- 结果提示使用插值表达式`{{ result }}`显示猜测结果。JavaScript逻辑部分:
- 引入了Vue.js的`ref`函数,用于创建响应式数据。
- `val`和`result`是两个响应式变量,分别用于存储用户输入的值和猜测结果。
- `key`是一个随机生成的1~100之间的整数,作为要猜测的目标数字。
- `guessed`是一个箭头函数,用于处理用户的输入并更新猜测结果。
- 首先,将用户输入的值转换为整数类型。
- 如果转换后的值不是一个有效的数字,则提示用户输入一个1~100之间的整数。
- 如果用户输入的数字大于目标数字,则提示用户往小一点猜。
- 如果用户输入的数字小于目标数字,则提示用户往大一点猜。
- 如果用户输入的数字等于目标数字,则恭喜用户猜对了。CSS样式部分:
- 通过`<style scoped>`标签定义了一些样式规则。
- `div#box`定义了一个容器的样式,包括宽度、外边距、边框、圆角和内边距。
- `input`和`p`定义了输入框和段落的字体大小和文本居中对齐的样式。总结:
这段代码实现了一个简单的猜数游戏,用户可以在输入框中输入一个数字进行猜测,根据提示信息判断数字的大小,直到猜对为止。
🎃运行效果
🎯水果商店
🎃代码解析
<template> <div id="box"> <h1 style="text-align: center;">水果商店—软工 </h1> <table class="table table-bordered table-hover"> <thead> <tr> <th>操作</th> <th>水果名称</th> <th>水果图片</th> <th>单价(斤)</th> <th>数量</th> </tr> </thead> <tbody> <tr v-for="item in fruitlist" :key="item.id"> <td> <input type="checkbox" v-model="item.state "> </td> <td>{{ item.fruit }}</td> <td><img style="width: 50px;height: 50px;border-radius: 50%;" :src="item.pic" alt=""></td> <td>¥{{ item.price }}</td> <td> <button type="button" @click="onSubClick(item.id)">-</button> <span>{{ item.count }}</span> <button type="button" @click="onAddClick(item.id)">+</button> </td> </tr> </tbody> <tfoot> <tr style="font-weight: bolder;"> <td colspan="2"> <span>总数量:{{ total }}斤</span> </td> <td colspan="2">总价:{{ amount }}元</td> <td style="text-align: center;"> <button type="button" class="btn btn-primary" :disabled="isDisabled">结算</button></td> </tr> </tfoot> </table> </div> </template> <script setup> import { reactive, computed } from 'vue'; const fruitlist = reactive([ { id: 1, fruit: '香橼', pic: '/src/assets/images/1.jpg', price: 5, count: 1, state: true }, { id: 2, fruit: '柚子', pic: '/src/assets/images/2.jpg', price: 4.5, count: 1, state: false }, { id: 3, fruit: '橘子', pic: '/src/assets/images/3.jpg', price: 3, count: 1, state: false }, { id: 4, fruit: '橙子', pic: '/src/assets/images/4.jpg', price: 6, count: 1, state: false }, { id: 5, fruit: '粑粑柑', pic: '/src/assets/images/5.jpg', price: 6.5, count: 1, state: false }, { id: 6, fruit: '柠檬', pic: '/src/assets/images/6.jpg', price: 4, count: 1, state: false }, { id: 7, fruit: '青柠', pic: '/src/assets/images/7.jpg', price: 5.2, count: 1, state: false }, ]) const onSubClick=(id)=>{ const findResult=fruitlist.find(function (x){ return x.id===id }) if(findResult&&findResult.count>1){ findResult.count-- } } const onAddClick = (id)=>{ const findResult=fruitlist.find(x=>x.id===id) if(findResult){ findResult.count++ } } const total=computed(()=>{ let t=0; fruitlist.forEach(x=>{ if(x.state){ t+=x.count; } }) return t; }) const amount=computed(()=>{ let a=0; fruitlist.forEach(x=>{ if(x.state) a+=x.price*x.count; }) return a; }) const isDisabled=computed(()=>{ var flag=true fruitlist.forEach(x=>{ if(x.state){ flag=false } }) return flag }) </script> <style scoped></style>
这段代码是一个基于Vue.js的水果商店购物车页面。它包含一个表格,显示了各种水果的名称、图片、单价和数量。用户可以通过点击"+"和"-"按钮来增加或减少每种水果的数量。此外,用户还可以通过勾选复选框来选择他们想要购买的水果。在表格的底部,显示了总数量和总价,以及一个结算按钮。
代码的主要部分包括:
1. HTML模板:定义了页面的结构,包括一个标题、一个表格和一个底部区域。表格的每一行代表一种水果,包含了操作、水果名称、水果图片、单价、数量等信息。底部区域显示了总数量和总价,以及一个结算按钮。
2. Vue.js脚本:定义了页面的行为,包括如何处理用户的点击事件,如何计算总数量和总价,以及如何判断结算按钮是否应该被禁用。
- `fruitlist`:这是一个响应式数组,存储了所有的水果信息。每种水果都有一个唯一的id,水果的名称、图片、单价、数量和是否被选中的状态。
- `onSubClick`和`onAddClick`:这两个函数处理用户点击"-"和"+"按钮的事件。它们通过查找对应的水果,然后减少或增加其数量。
- `total`:这是一个计算属性,用于计算所有被选中的水果的总数量。
- `amount`:这是一个计算属性,用于计算所有被选中的水果的总价。
- `isDisabled`:这是一个计算属性,用于判断结算按钮是否应该被禁用。只有当至少有一种水果被选中时,结算按钮才会启用。
3. CSS样式:定义了页面的样式,包括表格的布局、颜色、字体等。这部分代码没有给出,所以无法详细解释。
总的来说,这段代码实现了一个简单的水果商店购物车功能,用户可以查看和选择他们想要购买的水果,然后计算总价和总数量,最后进行结算。
🎃运行效果
🎯学习计划表
🎃代码解析
<!-- 学习计划表案例 --> <template> <h1 align="center">学习计划表—软工</h1> <div class="card"> <!-- 标题区域 --> <div class="card-header">学习计划表</div> <!-- 提交区域 --> <div class="card-body"> <form @submit.prevent="add"> <div class="row g-4"> <!-- 学习科目 --> <div class="col-auto"> <div class="input-group mb-3"> <span class="input-group-text" id="basic-addon1">学习科目</span> <input type="text" class="form-control" placeholder="请输入学习科目" v-model.trim="subject" /> </div> </div> <!-- 学习任务 --> <div class="col-auto"> <div class="input-group mb-3"> <span class="input-group-text" id="basic-addon1">学习内容</span> <textarea class="form-control" v-model.trim="content" placeholder="请输入学习内容" :style="{ height: '32px' }"></textarea> </div> </div> <!-- 学习地点 --> <div class="col-auto"> <div class="input-group mb-3"> <span class="input-group-text" id="basic-addon1">学习地点</span> <select class="form-select form-select-sm" v-model="selectedOption"> <option v-for="option in options" :value="option.place" :key="option.placeCode"> {{ option.place }} </option> </select> </div> </div> <!-- 添加按钮 --> <div class="col-auto"> <button type="submit" class="btn btn-primary">添加</button> </div> </div> </form> </div> </div> <table class="table table-striped table-hover table-bordered"> <thead> <tr> <th scope="col">序号</th> <th scope="col">学习科目</th> <th scope="col">学习内容</th> <th scope="col">学习地点</th> <th scope="col">完成状态</th> <th scope="col">操作</th> </tr> </thead> <tbody> <tr v-for="(item,index) in list" :key="item.id"> <td>{{ item.id }}</td> <td>{{ item.subject }}</td> <td>{{ item.content }}</td> <td>{{ item.place }}</td> <td> <div class="form-check form-switch"> <input class="form-check-input" type="checkbox" role="switch" :id="'cb' + item.id" v-model="item.status" /> <label class="form-check-label" :for="'cb' + item.id" v-if="item.status">已完成</label> <label class="form-check-label" :for="'cb' + item.id" v-else>未完成</label> </div> </td> <td> <a href="javascript:;" @click="remove(index,item.status)">删除</a> </td> </tr> </tbody> </table> </template> <script setup> import { ref,reactive} from 'vue' let subject = ref('') let content = ref('') let nextId = ref('') let selectedOption = ref('自习室') let options = ref([ { placeCode: 0, place: '自习室', }, { placeCode: 1, place: '图书馆', }, { placeCode: 2, place: '宿舍', }, ]) const list = reactive([ { id: '1', subject: 'Vue.js前端实战开发', content: '学习指令,例如v-if、v-for、v-model等', place: '自习室', status: false, }, ]) let add=()=>{ if(subject.value===''){ alert('学习科目为必填项!') return } nextId.value=Math.max(...list.map(item=>item.id))+1 const obj={ id:nextId.value, subject: subject.value, content:content.value, place:selectedOption.value, status :false, } list.push(obj) subject.value='' content.value='' selectedOption.value='自习室' } let remove=(x,status)=>{ if(status){ list.splice(x,1) } else{ alert("请完成该学习计划后在进行删除操作!") } } </script>
这段代码是一个Vue.js的示例,用于创建一个学习计划表。它包括一个表单来添加新的学习计划,以及一个表格来显示所有的学习计划。
首先,我们来看一下HTML部分。这部分主要包含一个标题和一个卡片,卡片中有一个表单和一个表格。表单用于输入新的学习计划,包括学习科目、学习内容和学习地点。表格用于显示所有的学习计划,包括序号、学习科目、学习内容、学习地点、完成状态和操作。
然后,我们来看一下JavaScript部分。这部分主要包含一些变量和函数。变量包括subject(学习科目)、content(学习内容)、nextId(下一个ID)、selectedOption(选择的学习地点)和options(所有可能的学习地点)。函数包括add(添加新的学习计划)和remove(删除学习计划)。
在add函数中,首先检查学习科目是否为空,如果为空则提示错误并返回。然后,生成一个新的ID,创建一个新的学习计划对象,并将其添加到list中。最后,清空表单中的输入。
在remove函数中,首先检查学习计划是否已完成,如果已完成则从list中删除该学习计划。如果未完成,则提示错误。
这段代码的主要功能是创建一个学习计划表,用户可以输入新的学习计划,也可以查看和删除已有的学习计划。