网页前端开发(基础进阶3--Vue)

Vue3

Vue是一款用于构建用户界面的渐进式的JavaScript框架。

Vue由2部分组成:Vue核心包,Vue插件包

Vue核心包包含:声明式渲染,组件系统。

Vue插件包:VueRouter(客户端路由),Vuex/Pinia(状态管理),Webpack/Vite(构建工具)

Vue的开发形式分为2种:基于核心包的局部开发,整站开发。

基于核心包的局部开发:只使用Vue核心包的局部开发。

整站开发:使用整个Vue生态进行开发。

框架:一套完整的项目解决方案,用于快速构建项目。

框架的优点:提升前端开发效率。

框架的缺点:需要记忆框架的使用规则。

1.Vue快速入门

(1)准备工作

1.引入Vue模块

在html文件中

<body>

        ..........

        .........

        <script type=‘module’> 

                import {createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

        </script>

</body>

2.创建Vue程序的应用示例,控制视图的元素

在html文件中

<body>

        ..........

        .........

        <script type=‘module’> 

                import {createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

                createApp({  });

        </script>

</body>

3.准备元素(div),被Vue控制。

<body>

        ..........

        .........

        <script type=‘module’> 

                import {createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

                createApp({  }).mount('#app'); // 只针对与id为app的元素进行挂载

        </script>

</body>

示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue入门</title>
</head>
<body><div id="app"><h1>{{ message }}</h1><h1>{{ count }}</h1></div><h1>{{ count }}</h1><script type="module">import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';createApp({ data() {return {message: 'Hello Vue!',count:100}}}).mount('#app'); // 只针对与id为app的元素进行挂载</script></body>
</html>

运行结果:

2.Vue常用指令

在html标签上,不同指令实现不同功能。

1.v-for

用于列表渲染,遍历容器中的元素/对象。

使用方法:

 <tr v-for="(item, index) in itemList"  :key="item.id">{{item}}</tr>

遍历itemList数组

遍历出来的元素是item

元素的索引是index

:key为遍历出来的元素添加唯一标识

[ ]是数组

{ }是对象

示例

<table><!--  表头  --><thead><!-- 定义一行 --><tr><th>序号</th><th>姓名</th><th>性别</th><th>头像</th><th>职位</th><th>入职日期</th><th>最后操作时间</th><th>操作</th></tr></thead><tbody><tr v-for="(e, index) in empList" :key="e.id"><!-- index表示索引从0开始 序号表示从1开始 --><td>{{index+1}}</td>  <td>{{e.name}}</td><td>{{e.gender==1?'男':'女'}}</td><!-- 插值表达式,不能出现在标签内部 --><td><img class='avatar'src="{{e.image}}" :alt='{{e.name}}'></td><td>{{e.position}}</td> //需要条件判断 <td>{{e.entryDate}}</td><td>{{e.lastOpTime}}</td><td><button type="button">修改</button><button type="button">删除</button></td></tr></tbody></table><script type="module">import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';createApp({ data() {return {searchFrome:{//封装用户输入的查询条件。name:'',gender:'',position:''},empList: [ //定义数组{"id":1,  //定义一个对象"name":"张三","gender": '1',"avatar": 'img/y2.png',"position": '1',"entryDate": '2020-01-01',"lastOpTime": '2025-01-01'},{"id":2,"name":"李四","gender": '2',"avatar": 'img/y2.png',"position": '2',"entryDate": '2020-01-01',"lastOpTime": '2025-01-01'},{"id":3,"name":"王五","gender": '1',"avatar": 'img/y2.png',"position": '3',"entryDate": '2020-01-01',"lastOpTime": '2025-01-01'}]} },// data后面添加方法methods:{search:function(){// 将搜索条件输出到控制台console.log(this.searchFrome);},clear:function(){// 清空搜索条件this.searchFrome={name:'',gender:'',position:''};}}}).mount('#all'); // 只针对与id为all的元素进行挂载</script>

        头像一栏显示不正确。原因:插值表达式,不能出现在标签内部。需要使用v-bind进行修饰。

        职位一栏不能正确显示,性别一栏(只有男或者女)可以使用三元运算符,但是职业有5种,无法使用三元运算符,应使用v-if/v-else-if/v-else或者v-show进行处理。

2.v-bind

        动态为标签属性绑定值(插值表达式,不能在标签内使用)

使用方法:

v-bind:属性="变量" :属性="变量"

<td><img class="avatar"  v-bind:src="e.image" :alt="e.name"></td>

可保证图片的正确显示。

<!-- 表格主体内容 --><tbody><tr v-for="(e, index) in empList" :key="e.id"><td>{{index + 1}}</td><td>{{e.name}}</td><td>{{e.gender == 1?'男' : '女'}}</td><!-- 插值表达式是不能出现在标签内部 --><td><img class="avatar"  v-bind:src="e.image" :alt="e.name"></td><td>{{e.entrydate}}</td><td>{{e.updatetime}}</td><td class="action-buttons"><button type="button">编辑</button><button type="button">删除</button></td></tr></tbody></table>

3.v-if/v-else-if/v-else

        用来控制元素的显示与隐藏。

        基于条件判断,来控制创建或移除元素节点(条件渲染)

        使用场景:网页运行时进行处理,要么显示要么不显示。

示例:

<body><div id="container"><!-- 表格展示区 --><table><!-- 表头 --><thead><tr><th>序号</th><th>姓名</th><th>性别</th><th>头像</th><th>职位</th><th>入职日期</th><th>最后操作时间</th><th>操作</th></tr></thead><!-- 表格主体内容 --><tbody><tr v-for="(e, index) in empList" :key="e.id"><td>{{index + 1}}</td><td>{{e.name}}</td><td>{{e.gender == 1?'男' : '女'}}</td><!-- 插值表达式是不能出现在标签内部 --><td><img class="avatar"  v-bind:src="e.image" :alt="e.name"></td><!-- v-if: 控制元素的显示与隐藏 --><td><span v-if="e.job == 1">班主任</span><span v-else-if="e.job == 2">讲师</span><span v-else-if="e.job == 3">学工主管</span><span v-else-if="e.job == 4">教研主管</span><span v-else-if="e.job == 5">咨询师</span><span v-else>其他</span></td><td>{{e.entrydate}}</td><td>{{e.updatetime}}</td><td class="action-buttons"><button type="button">编辑</button><button type="button">删除</button></td></tr></tbody></table>

v-else-if必须在v-if之后,可有多个v-else-if。

v-else必须在v-if/v-else-if之后。

4.v-show

        用来控制元素的显示与隐藏。与v-if/v-else-if/v-else有所区别。

v-if/v-else-if/v-else和v-show的区别:

        v-if网页运行时处理,不满足条件,直接不渲染此元素。

        v-show通过css样式,渲染v-show的所有元素,满足条件显示,不满足条件隐藏。

        基于css样式的display来控制显示与隐藏。

        使用场景:频繁切换显示与隐藏两种状态;如:下拉框。

示例:

<body><div id="container"><!-- 表格展示区 --><table><!-- 表头 --><thead><tr><th>序号</th><th>姓名</th><th>性别</th><th>头像</th><th>职位</th><th>入职日期</th><th>最后操作时间</th><th>操作</th></tr></thead><!-- 表格主体内容 --><tbody><tr v-for="(e, index) in empList" :key="e.id"><td>{{index + 1}}</td><td>{{e.name}}</td><td>{{e.gender == 1?'男' : '女'}}</td><!-- 插值表达式是不能出现在标签内部 --><td><img class="avatar"  v-bind:src="e.image" :alt="e.name"></td><!-- v-show: 控制元素的显示与隐藏 --><td><span v-show="e.job == 1">班主任</span><span v-show="e.job == 2">讲师</span><span v-show="e.job == 3">学工主管</span><span v-show="e.job == 4">教研主管</span><span v-show="e.job == 5">咨询师</span></td> <td>{{e.entrydate}}</td><td>{{e.updatetime}}</td><td class="action-buttons"><button type="button">编辑</button><button type="button">删除</button></td></tr></tbody></table></div>
</body>

5.v-model

        v-model用于获取表单项数据。

        v-on用于事件绑定。

        通常v-model和v-on配合起来使用。 

v-model中绑定的变量必须在data中定义

v-model使用方法:

<body>     

 <script type="module">

    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';

   

    createApp({

      data() {

        return {

          searchFrome:{//封装用户输入的查询条件。

            name:'',

            gender:'',

            position:''

          }

      }

    }).mount('#all'); // 只针对与id为all的元素进行挂载

 </script>

</body>

name<-->姓名

gender<-->性别

position<-->职位

具体代码:

<body>
<div id="all"><!-- 显示采集到的数据 --><!-- {{searchFrome}} --><form class="search-from" action="/search" method="post"><label for="name">姓名:</label><input type="text" name="name" id="name" v-model="searchFrome.name" placeholder="请输入姓名"><label for="gender">性别:</label><select name="gender" id="genser" v-model="searchFrome.gender"><option value=""></option><option value="1">男</option><option value="2">女</option></select><label for="position">职位:</label><select name="position" id="position" v-model="searchFrome.position"><option value=""></option><option value="1">班主任</option><option value="2">讲师</option><option value="3">学工主管</option><option value="4">教研主管</option><option value="5">咨询师</option></select><button type="button" v-on:click="search">查询</button><button type="button" @click="clear">清空</button></form><script type="module">import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';createApp({ data() {return {searchFrome:{//封装用户输入的查询条件。name:'',gender:'',position:''}} }}).mount('#all'); // 只针对与id为all的元素进行挂载</script>
</body>

 在标签中使用:

<input type="text" name="name" id="name" v-model="searchFrome.name" placeholder="请输入姓名">

将姓名文本栏中输入数据导入data中的searchFrome.name

 在标签中使用:

<select name="gender" id="genser" v-model="searchFrome.gender">

将性别文本栏中输入数据导入data中的searchFrome.gender

  在标签中使用:

<select name="position" id="position" v-model="searchFrome.position">

将职业文本栏中输入数据导入data中的searchFrome.position

效果如下:

6.v-on

使用方法:
v-on:click="函数名"  或

@click="函数名"

为html标签绑定事件(添加事件监听)。

通常与v-model配合使用。

 <button type="button" v-on:click="search">查询</button><button type="button" @click="clear">清空</button>

将查询与清空按钮绑定事件监听。

整体代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>员工管理</title><style>#all{width: 80%;margin: 0 auto;}.navbar{background-color: rgb(170, 170, 170);display: flex;/*弹性布局*/justify-content: space-between;/*左右对齐*/align-items: center;/*垂直居中*/padding: 5px;}.navbar h1{margin: 0;/*去掉h1标签的默认间距*/font-weight: bold;/*加粗*/color: white;/*白色文字*/font-family: "楷体";}.navbar a{color: white;font-weight: bold;/*加粗*/text-decoration: none;/*取消下划线*/align-items: center;/*垂直居中*/}.search-from{display: flex;flex-wrap: nowrap;/*换行*/align-items: center;/*垂直居中*/gap: 10px;/*间距*/margin-top: 10px;margin-bottom: 10px;}.search-from input,select{padding: 5px;width: 220px;}table{width: 100%;border-collapse: collapse;}th,td{border: 1px solid rgb(0, 0, 0);/*边框*/padding: 5px;text-align: center;}.footer{background-color: #b5b3b3;color: white;text-align: center;padding: 10px 0;margin-top: 30px;}</style>
</head>
<body>
<div id="all"><div class="navbar"><h1>tlias 智能学习辅助系统</h1><a href="">退出登录</a></div><!-- 显示采集到的数据 --><!-- {{searchFrome}} --><form class="search-from" action="/search" method="post"><label for="name">姓名:</label><input type="text" name="name" id="name" v-model="searchFrome.name" placeholder="请输入姓名"><label for="gender">性别:</label><select name="gender" id="genser" v-model="searchFrome.gender"><option value=""></option><option value="1">男</option><option value="2">女</option></select><label for="position">职位:</label><select name="position" id="position" v-model="searchFrome.position"><option value=""></option><option value="1">班主任</option><option value="2">讲师</option><option value="3">学工主管</option><option value="4">教研主管</option><option value="5">咨询师</option></select><button type="button" v-on:click="search">查询</button><button type="button" @click="clear">清空</button></form><table><!--  表头  --><thead><!-- 定义一行 --><tr><th>序号</th><th>姓名</th><th>性别</th><th>头像</th><th>职位</th><th>入职日期</th><th>最后操作时间</th><th>操作</th></tr></thead><tbody><tr v-for="(e, index) in empList" :key="e.id"><!-- index表示索引从0开始 序号表示从1开始 --><td>{{index+1}}</td>  <td>{{e.name}}</td><td>{{e.gender==1?'男':'女'}}</td><!-- 插值表达式,不能出现在标签内部 --><td><img class='avatar' v-bind:src="e.avatar" :alt='e.name'></td><!-- <td>{{e.position}}</td> //需要条件判断 --><td><span v-if="e.position==1">班主任</span><span v-else-if="e.position==2">讲师</span><span v-else-if="e.position==3">学工主管</span><span v-else-if="e.position==4">教研主管</span><span v-else-if="e.position==5">咨询师</span><span v-else>其他</span></td><td>{{e.entryDate}}</td><td>{{e.lastOpTime}}</td><td><button type="button">修改</button><button type="button">删除</button></td></tr></tbody></table><footer class="footer"><p>cyy有限公司</p><p>版权,时间2025.5.9</p></footer>
</div><script type="module">import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';createApp({ data() {return {searchFrome:{//封装用户输入的查询条件。name:'',gender:'',position:''},empList: [ //定义数组{"id":1,  //定义一个对象"name":"张三","gender": '1',"avatar": 'img/y2.png',"position": '1',"entryDate": '2020-01-01',"lastOpTime": '2025-01-01'},{"id":2,"name":"李四","gender": '2',"avatar": 'img/y2.png',"position": '2',"entryDate": '2020-01-01',"lastOpTime": '2025-01-01'},{"id":3,"name":"王五","gender": '1',"avatar": 'img/y2.png',"position": '3',"entryDate": '2020-01-01',"lastOpTime": '2025-01-01'}]} },// data后面添加方法methods:{search:function(){// 将搜索条件输出到控制台console.log(this.searchFrome);},clear:function(){// 清空搜索条件this.searchFrome={name:'',gender:'',position:''};}}}).mount('#all'); // 只针对与id为all的元素进行挂载</script></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型相关技术综述

多模态大模型&大模型训练语料持续迭代 已经开始整理多模态-视觉部分&#xff1a; 主要分为一下几块 多模态信息压缩模型&#xff08;clip、vit、swiT&#xff09; 生成模型&#xff08;vae、gan、flow、ddpm、sde…) 其它多模态大模型&#xff08;语音、视频、slam、3…

Vue3中Ant-design-vue的使用-附完整代码

前言 首先介绍一下什么是Ant-design-vue Ant Design Vue 是基于 Vue 3 的企业级 UI 组件库&#xff08;同时兼容 Vue 2&#xff09;&#xff0c;是蚂蚁金服开源项目 Ant Design 的 Vue 实现版本。它遵循 Ant Design 的设计规范&#xff0c;提供丰富的组件和高质量的设计体系&…

建造者模式:优雅构建复杂对象

引言 在软件开发中&#xff0c;有时我们需要创建一个由多个部分组成的复杂对象&#xff0c;这些部分可能有不同的变体或配置。如果直接在一个构造函数中设置所有参数&#xff0c;代码会变得难以阅读和维护。当对象构建过程复杂&#xff0c;且需要多个步骤时&#xff0c;我们可…

如何通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式(并进行了训练、推理)

计划让AI帮助编程使用TabPFN模型进行股价推理 原计划提问的prompt 如何通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式 本意是想让AI分步执行&#xff0c;先处理股票数据&#xff0c;然后再进行模型训练&#xff0c;结果豆包超…

[蓝桥杯]最大化股票交易的利润

最大化股票交易的利润 题目描述 实现一个算法寻找最大化股票交易利润的策略。介绍如下&#xff1a; 股票价格每天都在变化&#xff0c;以数组的索引表示交易日&#xff0c;以数组的元素表示每天的股票价格。可以通过买入和卖出获得利润。一天只能进行一次买入或卖出操作&…

URL 结构说明+路由(接口)的认识

一、URL 结构说明 以这个为例&#xff1a;http://127.0.0.1:5000/zhouleifeng 1.组成部分: http://&#xff1a;协议 127.0.0.1&#xff1a;主机&#xff08;本地地址&#xff09; :5000&#xff1a;端口号&#xff08;Flask 默认 5000&#xff09; /zhouleifeng&#xff1a…

微服务商城-用户微服务

数据表 用户表 CREATE DATABASE user; USE user;CREATE TABLE user (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 用户ID,username varchar(50) NOT NULL DEFAULT COMMENT 用户名,password varchar(50) NOT NULL DEFAULT COMMENT 用户密码&#xff0c;MD5加密…

Java面试题及答案整理( 2025年最新版,持续更新...)

最近发现网上很多Java面试题都没有答案&#xff0c;所以花了很长时间搜集整理出来了这套Java面试题大全&#xff0c;希望大家能够喜欢&#xff01; 注&#xff1a;篇幅有限&#xff0c;资料已整理成文档&#xff0c;后台si我666&#xff0c;我一个个发&#xff01; 这套面试文…

[论文阅读]PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning

PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning | IJCAI IJCAI-22 发表于2022年的论文&#xff0c;当时大家还都在做小模型NLP的相关工作&#xff08;BERT&#xff0c;Ro…

Redis最佳实践——性能优化技巧之集群与分片

Redis集群与分片在电商应用中的性能优化技巧 一、Redis集群架构模式解析 1. 主流集群方案对比 方案核心原理适用场景电商应用案例主从复制读写分离数据冗余中小规模读多写少商品详情缓存Redis Sentinel自动故障转移监控高可用需求场景订单状态缓存Redis Cluster原生分布式分片…

Vue 生命周期全解析:从创建到销毁的完整旅程

Vue 生命周期是每个 Vue 开发者必须深入理解的核心概念之一。它定义了组件从创建、挂载、更新、销毁的整个过程&#xff0c;以及在这个过程中各个阶段提供的钩子函数。掌握生命周期不仅能帮助你理解 Vue 的工作原理&#xff0c;还能让你在合适的时机执行特定的操作&#xff0c;…

【Rust 高级trait】Rust trait的一些高级用法解密

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

联想电脑护眼卫士与系统颜色配置(X-Rite)冲突 | 显示设置频繁变换色阶 - 解决方案

联想电脑护眼卫士与系统颜色配置X-Rite冲突 | 显示设置频繁变换色阶 - 解决方案 前言方案1&#xff1a;解决联想护眼卫士方案2&#xff1a;解决系统颜色配置(X-Rite) 前言 自带X-Rite软件的联想电脑&#xff08;以拯救者Y9000P&#xff0c;Win11系统为例&#xff09;&#xff…

MySQL中SELECT查询的执行顺序

MySQL中SELECT查询的执行顺序 在日常的数据库开发中&#xff0c;我们经常会写各种复杂的SELECT查询语句。然而&#xff0c;很多开发者对于MySQL实际执行这些查询的顺序并不完全了解。理解查询的执行顺序不仅有助于编写更高效的SQL语句&#xff0c;还能帮助我们更好地优化查询性…

es 的字段类型(text和keyword)

Text 当一个字段是要被全文检索时&#xff0c;比如 Email 内容、产品描述&#xff0c;这些字段应该使用 text 类型。设置 text 类型以后&#xff0c;字段内容会被分析&#xff0c;在生成倒排索引之前&#xff0c;字符串会被分析器分词。text类型的字段不用于排序&#xff0c;很…

MySQL安装及启用详细教程(Windows版)

MySQL安装及启用详细教程&#xff08;Windows版&#xff09; &#x1f4cb; 概述 本文档将详细介绍MySQL数据库在Windows系统下的下载、安装、配置和启用过程。 &#x1f4e5; MySQL下载 官方下载地址 官方网站: https://dev.mysql.com/downloads/社区版本: https://dev.my…

Linux下使用nmcli连接网络

Linux下使用nmcli连接网络 介绍 在使用ubuntu系统的时候&#xff0c;有时候不方便使用桌面&#xff0c;使用ssh远程连接&#xff0c;可能需要使用nmcli命令来连接网络。本文将介绍如何使用nmcli命令连接网络。nmcli 是 NetworkManager 的命令行工具&#xff0c;用于管理网络连…

Python----循环神经网络(BiLSTM:双向长短时记忆网络)

一、LSTM 与 BiLSTM对比 1.1、LSTM LSTM&#xff08;长短期记忆网络&#xff09; 是一种改进的循环神经网络&#xff08;RNN&#xff09;&#xff0c;专门解决传统RNN难以学习长期依赖的问题。它通过遗忘门、输入门和输出门来控制信息的流动&#xff0c;保留重要信息并丢弃无关…

U盘挂载Linux

在 只能使用 Telnet 的情况下&#xff0c;如果希望通过 U盘 传输文件到 Linux 系统&#xff0c;可以按照以下步骤操作&#xff1a; &#x1f4cc; 前提条件 U盘已插入 Linux 主机的 USB 接口。Linux 主机支持自动挂载 U盘&#xff08;大多数现代发行版默认支持&#xff09;。T…

QuickBASIC QB64 支持 64 位系统和跨平台Linux/MAC OS

QuickBASIC 的现代继任者 QB64 已发展成为一个功能强大的开源项目&#xff0c;支持 64 位系统和跨平台开发。以下是详细介绍&#xff1a; 项目首页 - QB64pe:The QB64 Phoenix Edition Repository - GitCode https://gitcode.com/gh_mirrors/qb/QB64pe 1. QB64 概述 官网&am…