前端 - 2023.9.15 -
VScode 下载地址 https://code.visualstudio.com/
https://www.w3school.com.cn/tags/index.asp // html 使用文档
VScode 使用
变中文
扩展(Extensions) --> chinese(搜索) --> install --> 右下角提示 重启
中英文之间切换
Ctrl+Shift+p --> configigure display language
扩展 插件
1. Chinese(Simplified)Language Pack // 中文语言包
2. Code Spell Checker // 拼写检查器 自动检测单词是否正确
3. HTML CSS Support // 样式表的 自动补全
4. JavaScript(ES6)code snippets // 支持ES6 语法提示
5. Mithril Emmet // 补全代码
6. Path Intellisense // 路径提示插件
7. Vue 3 Snippets // 快速创建常用的Vue组件和指令 可能与其他有冲突
8. VueHelper // 最好的vue代码提示插件
9. Auto Close Tag // 自动闭合HTML/XML标签
10. Auto Rename Tag // 自动完成另一侧标签的同步修改
11. beautify // 格式化 html js css
12. Bracket Pair Colorizer // 给括号加上不同的颜色
13. open in browser // 快速打开浏览器 Alt + B
14. Vetur // Vue多功能集成插件 包括 语法高亮 智能提示 错误提示 自动补全等
15. InteIIiJ IDEA Keybindings // 在 VScode中使用 IDEA快捷键
快捷键
0. ! // 生成 网页的 基本配置
1. Shift + Alt + F // 格式化代码
2. Alt + ↓ // 向下移动一行
3. Shift + Alt + ↓ // 复制一行
4. Ctrl + H
5. Ctrl + Enter // 光标指向下一行
6. h$*5 // 生成 1 - 5 标题标签
7. Alt + b // 打开浏览器查看结果 需要安装 open in browser插件
8. ul>li*3 // 生成无序列表
9. table>tr*3>td*2{单元格} // 创建三行两列的表格 td里面的 文本信息是 单元格
10. Ctrl + B // 隐藏目录栏
注:
使用 VScode 编辑 vue 代码的时候 不能使用 快捷键 添加注释 首先检查有下角 选择语言模式是不是 vue类型
VScode 默认不支持vue 类型 如果其中没有vue类型 可能是插件冲突
卸载有关 vue的插件. 重新按照 vetur 及 VueHelper插件
Avue
一. 在 Avue 中 添加 按钮 并 弹出窗口 需要的代码
<avue-crud // 按钮 需要在 <avue-crud> 标签中添加
<template #menu-left> // 添加一个按钮 有多个按钮 在里面添加 <el-button> 其中 #menu-left 在窗口的 左侧添加按钮
<el-button type="primary" v-if="permission.recruitBasisAmount_modify" @click="handleRecruitBasisAmount">批量修改招募基础金额</el-button>
</template>
</avue-crud>
// 对话框窗口信息 (点击按钮后 弹出的 对话框窗口信息) 在 <avue-crud> 外添加
<el-dialog :title="'批量修改招募基础金额'" append-to-body v-model="boxRecruitBasisAmount" width="600px" :fullscreen="dialogFull" v-if="boxRecruitBasisAmount">
<div class="avue-crud__dialog__header">
<div style="padding-right:40px" @click="dialogFull ? dialogFull = false : dialogFull = true">
<i class="el-icon-full-screen"></i>
</div>
</div>
<avue-form :option="optionRecruitBasisAmount" v-model="recruitBasisAmountModel"></avue-form>
<div style="text-align:center; color: #f6a60c;">
招募基础金额为普通合伙人每笔订单收益金额,当每日交易单数满足系统设置交易单数时,(普通合伙人分红金额=招募基础金额*单数)
</div>
<div style="text-align:center; margin-top: 10px"> // 新增了 确定 和 取消 按钮 隐藏溜原来的 提交 按钮
<el-button type="primary" @click="confirmRecruitBasisAmount">确定</el-button>
<el-button type="primary" @click="cancelRecruitBasisAmount">取消</el-button>
</div>
</el-dialog>
<script>
import { recruitBasisAmountModify } from "@/api/account/custReachStandardCaptain"; // recruitBasisAmountModify 导入 发送后端的接口
import { optionRecruitBasisAmount } from "@/option/account/captain"; // 导入 option 这里option在另一个文件中. 如果在同一文件中则不用导入
export default {
data () {
return {
optionRecruitBasisAmount: optionRecruitBasisAmount, // 指明 option
recruitBasisAmountModel: {}, // 代表 option 从后端 获取到的数据
boxRecruitBasisAmount: false, // 对话框窗口 默认设置为关闭
methods: {
// 批量修改招募基础金额 点击按钮后的 操作
handleRecruitBasisAmount(){
if (this.selectionList.length === 0) { // 如果没有选择复选框 则给出提示
this.$message.warning("请选择需要修改的合伙人");
return;
}
this.recruitBasisAmountModel = {}; // 在 option 中 字段中的数据
this.boxRecruitBasisAmount = true; // 显示 弹出窗口对话框
},
confirmRecruitBasisAmount(){ // 点击确定按钮后的操作
const basisAmount = this.recruitBasisAmountModel.recruitBasisAmount ; // 获取文本框或下拉列表框中的数据
// .recruitBasisAmount 是 option 中 字段名 prop: "recruitBasisAmount", 的数据
const reg = /^\d{1,4}(\.\d{1,4})?$/; // 正则表达式规则,确保输入为数字(整数或小数,小数点前后个最多四位)最多万位以下
if (!reg.test(basisAmount)) { // 检测 获取到的数据 是否符合
this.$message.warning('输入有误,请重新输入');
return;
}
const custIdArr = this.selectionList.map(item => item.custId).filter(id => id);
const custId = custIdArr.join(','); // 数组 转成 字符串 使用 逗号 分割
recruitBasisAmountModify({ // 调用 传入后端的接口 把 数据 传递给后端
custId: custId,
basisAmount: basisAmount,
})
.then(response => { // 前端返回 成功后的 处理
console.log(response.data);
this.$message.success('修改成功');
this.boxRecruitBasisAmount = false;
this.onLoad(this.page, this.query); // 重新加载当前页面
})
.catch(error => { // 前端返回 失败后的 处理
console.error('修改失败', error);
this.boxRecruitBasisAmount = false;
});
},
cancelRecruitBasisAmount() { // 点击 取消按钮 的操作
this.recruitBasisAmountModel = {};
this.boxRecruitBasisAmount = false;
},
custReachStandardCaptain.js
export const recruitBasisAmountModify = (params) => {
return request({
url: '/api/fss-account/CustReachStandardCaptain/recruitBasisAmountModify',
method: 'get',
params: {
...params,
}
})
}
captain.js
export const optionRecruitBasisAmount = {
menuBtn: false,
column: [
{
label: "招募基础金额",
prop: "recruitBasisAmount",
rules: [
{
required: false,
message: "请输入招募基础金额",
trigger: "blur",
},
],
labelWidth: 190,
span: 24,
},
]
};
注:
this.selectionList // 可以获取到 页面中 复选框中的 数据
this.selectionList.length // 复选框中的 数据 的长度
this.selectionList.map(item => item.custId).filter(id => id); // 可以获取到 custId
this.$message.warning("请选择需要修改的合伙人"); // 警告 提示信息 会在页面显示警告信息
const reg = /^\d{1,4}(\.\d{1,4})?$/;
reg.test(basisAmount) // 检测 正则的规则是否匹配
custIdArr.join(','); // 数组类型 转成 字符串
this.onLoad(this.page, this.query); // 重新加载当前页面
Avue3 报错解决:
1. 错误提示: TypeError: Cannot read properties of null (reading 'style') at TableLayout.setHeight
在Avue中 新添加的页面vue2 转成vue3 会出现这种情况
解决: 在 option 中 calcHeight: "auto", 去掉就好
标签
骨架标签
<!DOCTYPE html> // H5 的声明 网页必备组成部分 用于浏览器识别
<html>
<head>
<title>java html python</title> // title标签是 head里必须包括的 一般写关键字 seo优化利于
<meta charset="utf-8"> // utf-8 是程序的通用语言
</head>
</html>
标题标签
<h1>aaaaa</h1> // 标题标签 1最大 6最小
<h2>bbbb</h2>
<h3>cccc</h3>
<h1 align="left">
align="left|center|right" // align 就是一个属性 "left" 是属性值
标签的属性 在标签<h1 align="left">里面的是属性 不是两个<h1>不是属性</h1>中间的
段落格式标签
<p></p> // 段落标签 双标签
<br> // 换行标签 单标签 <br /><br> 都可以
<hr> // 水平线标签
color="red" : 设置水平线的颜色
width="300px" : 设置水平线的长度
size="20px" : 设置水平线的高度
align="left|right": 设置水平线的对齐方式 默认居中 可取值 left|right
图片标签
<img> // 图片标签
src="1.jpg" // 图片路径
alt="图片走丢了..." // 当图片路径不存在时 会显示碎裂的效果并 加上这段文字
width="300px" // 规定图片的宽度 单位是 px 另一个但是百分比 相当于父元素的百分比
height="100px" // 高度 设置图片会变形 一般不设置这个属性 宽度和高度设置其中一个另一个会等比例缩放
title="哇" // 鼠标悬停在图片上给于的提示信息
超链接标签
<a></a> 超链接标签 可以嵌套其他标签 如 <img>实现图片跳转
href="#" // 跳转本页
<a href="https://www.baidu.com/">超链接</a> // 超链接标签 地址也写全 否则不能跳转
href="https://www.baiu.com" // 必须的属性 跳转的链接 如果没有 会以文本显示
href="https://baidu.com" // 跳转的链接
target="_blank" // 打开方式
_blank // 新开窗口
_self // 当前窗口 默认的
文本标签 // 可以互相嵌套
<em>大米粥</em> // 定义着重文字
<b>大米粥</b> // 定义粗体文本
<i>大米粥</i> // 定义斜体字
<strong>大米粥</strong> // 定义加重语气
<del>大米粥</del> // 定义删除字
<span>大米粥</span> // 没有特定含义 可在CSS中方便调整样式
有序列表 // 可以嵌套列表
<ol type="I"> // 定义一个有序列表 有顺序标号
<li>哈哈</li>
<li>嘎嘎</li>
</ol>
type="I" // <ol></ol> 的属性 可调整 显示样式 默认 1 2 3
无序列表
<ul type="none"> // 一般多用于 导航 可用CSS调整
<li>哈哈</li>
<li>嘎嘎</li>
<ul>
type="disc|circle|square|none" // 默认disc 小黑原点|实心圆|空心圆|什么都没有
表格标签:
<tr></tr> 行
<th></th> 表头 就是 行里面的文字 加粗 居中显示
<td></td> 单元格 列 (一般所有列的数目相等)
<table> // 三行两列
<tr>
<td>单元格</td>
<td>单元格</td>
</tr>
<tr>
<td>单元格</td>
<td>单元格</td>
</tr>
<tr>
<td>单元格</td>
<td>单元格</td>
</tr>
</table中属性>
table中属性
border="1" 边框
cellspacing="0" 设置边框中间的空白是0
width="400px" 宽度 px可以省略
height="200px" 高度
表格合并 <td> 中的属性
colspan="3" // 水平合并3个单元格 合并3个列 有这个属性就少写2个列
<td colspan="2">单元格</td> // 此单元格 占两个位置
<td>单元格</td> // 一共3个列
rowspan="2" // 垂直合并2个单元格 合并以坐上为基准 其他删除
Form表单
<form action="" method="get"></form> // 表单容器
action="https://www.baidu.com" // 必须有 请求给到后端服务器
method="get|post" // 必须有 请求的方式 get提交的数据url可以看到,post看不到 默认是get
<form action="https://www.baidu.com" method="get|post" name="myform">
<input> // 输入框 默认type是 text类型
<input type='text'> // 文本输入框 type是表单类型
<input type="submit"> // 提交按钮
用户名:<input type="text" name="username"> // 文本输入框 那么值是标记 用于调用
密码:<input type="password" name="pwd"> // 密码输入框
</form>
<input> 单标签 用于 form表单里面
<input type="text" name="username">
name="username" // 用于用户名或密码必须有 名字 用于后面调用 样式等
type='text|password|submit' // 必须有 类型 定义 <input>标签的类型
text 文本输入框
password 密码输入框
submit 提交按钮
value="登录" // 更改 提交按钮的 文本 把提交改成登录. 配合submit使用
块元素 换行 独占一行(自上而下垂直排列) 可以设置 width height 属性 一般块元素可以包含行元素和其他块级元素
<div></div>
<form action=""></form>
<h1></h1>
<hr>
<p></p>
<table></table>
<ol></ol>
<ul></ul>
内联元素(行内元素) 不换行 行元素会不占页面中的一行, 只占自身的大小,可以设置width.
不能设置height 一般内联元素包含内联元素,不包含
<a href="#"></a>
<b></b>
<em></em>
<i></i>
<span></span>
<strong></strong>
行内块级元素 不换行 能够识别宽高
<button></button>
<img src="" alt="">
<input type="text">
容器标签
<div> 容器 结构标签 本身没有任何效果 可以理解为 没有边的方框
视频 video
<video src="1.mp4"></video>
controls="controls" // 播放控件 如果 属性 = 属性值 可把属性值省略 如下
<video src="./video/1.mp4" controls width="200px"></video>
音频 audio
<audio src="" controls></audio> // 用法跟video 一样
div 盒子模型
<div></div>
盒子模型组成:
content: 内容区域
padding: 内边距区域
border: 边框区域
margin: 外边框区域 不属于 盒子模型里面的 外边距
div 中 CSS的样式
div{
width: 200px; // 盒子的宽 定义了内容区域的宽
height: 200px; // 盒子的高 定义了内容区域的高
box-sizing: border-box; // 边界 如果有此代码 上面定义的宽高是 整个盒子的大小 前三区域的
background-color: #33cfeb; // 盒子的背景色 便于观察而已 前三区域的
padding: 20px 20px 20px 20px; // 内边距大小 分别是 上 右 下 左 的距离 如果都相同 可只写一个 padding: 20px;
border: 10px solid red; // 边框大小 solid red 线条的颜色
margin: 30px 30px 30px 30px; // 外边距大小 不属于盒子内部的大小 也是上右下左的顺序 如果指定一个值是 上右下左
margin: 0 auto; // 如果指定三个值是 上 右 下 如果指定两个值是 上下 和 左右 .
} // 此设置是居中 上下是0 左右自动设置 自动就是居中
CSS样式:
行内样式: 写在标签的style属性中
内嵌样式: 写在style标签中(可以写在 页面的任何位置,但通常约定写在head标签中)
外联样式: 写在一个单独的.CSS文件中(需要通过link 标签在网页中引入)
style 是 css 的样式 行内样式和内嵌样式
选择器
<h1 id="idname" class="cls">set id CSS<h1/>
元素选择器
h1 { ... }
id选择器 根据id的属性 设置 id是唯一值
#idname { ... }
类选择器 根据class属性 设置 class 可以重复
.cls { ... }
优先级: id > 类 > 元素
属性
color: 颜色的三种表示方法
color: hotpink;
color: rgb(155, 0, 155);
color: #2235ff
font-size: 24px;
text-decoration-line
a {text-decoration-line: none;} // 定义 超链接 没有下划线
JavaScript // 用于和 后端 交互
<script></script> // 在html页面的任意地方 放置任意数量的<script> 一般会放在<body>底部
<script> // 第一种 内部脚本 直接写 js 代码
alert('hello js'); // 代码结尾以 ; 结尾 但是可以省略 不建议省略
</script>
<script src="./js/demo.js"></script> // 第二种 外部脚本 同css一样 在文件中不用写<script></script>
注释: // 和 /* ... */
{ ... } 代码块 作用域
输出语句
window.alert("aaaaaa"); // 提示框
alert("aaaaaa"); // 上面的 window 可以省略
document.write("bbbbbb"); // 输出到 html 页面
console.log("ccccccc"); // 输出到 控制台 控制台在 F12的console页面
变量的定义
var 定义一个全局变量 可重复声明 即使在 代码块中{ }声明变量 在外面也可调用
var a = 10; // var 是定义一个全局变量 并赋值 10
a = "张三"; // JS是弱类型语言 变量可存储不同类型的值
var a = 100; // 可以重复声明
let 定义一个局部变量 只在代码块中有效 不可以重复声明
let b = 10;
alert(b);
const 定义一个常量 不可以改变
const c = 200;
alert("c=" + c);
数据类型
number: // 数字 可直接 定义
string: // 字符串 使用 单引号或 双引号定义的 是字符串
boolean: // 布尔 true false
null: // 对象为空 会返回 object 类型
undefined: // 当声明的变量未初始化时, 该变量的默认值是undefined
typeof 变量 // 可以获取变量值的类型
var a = 10;
alert(typeof a); // 获取到类型 输出
运算符 // 同java一样
算术运算符: + - * / % ++ --
赋值运算符: = += -= *= /= %=
比较运算符: > < >= != == === // == 会进行类型转换 ===不会进行类型转换
逻辑运算符: && || !
三元运算符: 条件表达式?true_value:false_value
类型转换
字符串转数字 parseInt
1. 如果是纯数字的字符串 会转换成 数字
2. 如果开头是数字 中间有字母 只会转换前面的数字
3. 如果开头是字母 结果为 NaN
parseInt("100") // 将 string 转换成 number
parseInt("12a45"); // 结果为 12 会从头匹配 遇到字母 取之前匹配的值
parseInt("a45"); // 结果为 NaN 不是一个字母 not a number
var a = '1231456';
alert("a=" + typeof(a));
a = parseInt(a);
alert("a=" + typeof(a));
其他类型转换为boolean
1. number: 0和NaN 为false 其他均为 true
2. string: 空字符串为false 其他均为 true
3. null 和 undefined: 为 false
流程控制
if(0){} // 这里会把 0 转换成 boolean 类型
if(null){}
switch
for
while
do ... while
函数
定义函数:
1. 定义函数 不需要 指明 参数类型 使用 function 定义函数
2. 不需要指明 方法返回值 有返回值 直接return就可以
方式一:
function 函数名(参数1,参数2){}
方式二:
var fname = function (参数1,参数2){} // 相当于 使用 变量 去接收函数
调用函数:
函数名(实际参数列表)
方式一:
function add(a,b){
return a + b;
}
var result = add(10,20);
alert(result);
方式二:
var fname = function(c,d){
return c - d;
}
var result2 = fname(50,33,40,50); // 传参的时候可以传递多个,但是只有前两个能接收,其他忽略
alert(result2);
箭头函数: 当函数作为参数的时候 可以简写 函数
(...) => {...} // function(...){...} function可以省略
JS对象
基础对象
1. Array 数组对象
定义数组对象
方式一: var 变量名 = new Array(元素列表);
# var arr = new Array(1,2,3,4);
方式二: var 变量名 = [元素列表];
# var arr = [1,2,3,4];
调用数组
arr[索引]=值;
# arr[10] = "hello";
# var arr = new Array(1,3,5,7);
# alert("第二个元素是:" + arr[1]);
# alert(arr[9]); // 未被赋值的变量的值是 undefined
# arr[10] = 15; // 没有10号索引 也可以赋值 不会报错
# alert(arr[10]);
属性
length: 获取数组的长度
for循环遍历数组 遍历数组的所有元素 包括没有值的元素 和 forEach 方法有所区别
# var arr= [2,4,6,8,9];
# for (let i = 0; i < arr.length; i++) {
# alert(arr[i]);
# }
方法:
forEach(函数) 遍历数组中的每个有值的元素,并调用一次传入的函数.
# var arr= [2,4,6,8,9];
# arr.forEach(function(e) {
# console.log(e);
# })
push() 将新元素添加到数组的末尾,并返回新的长度.
# var arr= [2,4,6,8,9];
# arr.push(7,8,9);
# console.log(arr);
splice(2,2) 从数组中删除元素. 从第2号索引开始删除 删除2个元素
# var arr= [2,4,6,8,9];
# arr.splice(2,2);
# console.log(arr);
2. String 字符串对象
定义数字符串对象
方式一: var 变量名 = new String("变量值");
# var s = new String("哈哈");
方式二: var 变量名 = "变量值";
# var s = "嘎嘎";
属性:
length: 获取字符串的长度
# var s ="aaaa";
# console.log(s.length);
方法:
charAt(num.) 返回指定位置的字符
indexOf(string) 检索字符串位置 查找字符 在字符串中的位置
# var s ="abcdefg";
# console.log(s.length);
# console.log(s.charAt(2));
# console.log(s.indexOf("c"));
trim() 去除字符串两边的空格 返回一个新字符串
# var s1 = " 爆米花呀真好吃! "
# var ss = s1.trim();
# console.log(s1);
# console.log(ss);
substring(start,end) 字符串截取 开始索引和结束索引 函头不含尾 空格也算
# var s1 = " 爆花米呀真好吃! "
# var s2 = s1.substring(3,6);
# console.log(s2);
自定义对象
var 对象名 = {
属性名1: 属性值,
属性名2: 属性值,
属性名3: 属性值,
函数名称: functio(参数){},
}
# var user = {
# name: "tom",
# age: 10,
# eat: function(){
# alert("吃");
# },
# play(){ // 函数的 简写方法
# alert("玩");
# }, // 最后一个逗号可省略 最好加上
# }
# alert(user.name);
# user.eat();
3. JSON 对象 与自定义对象大致相同 都是"key": "value", 成对查询 但是需要所有的key都引号
以逗号,结尾 在最后一个值的时候 不加 逗号,
在定于数组中最后一个值 不加逗号,
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
JSON 中的 value值 的数据类型 及 书写方式
数字(整数或浮点数) 直接写
字符串 双引号中 "janice"
逻辑值 直接写 true false
数组 方括号中 值加引号 最后一个值不加逗号, ["北京","上海","广州"]
对象 花括号中
null
手
JSON方法 将 json对象 转换成 js的对象
JSON.parse(json);
# var jsonstr1 = '{"name":"janice","age":"22"}';
# var jsonstr2 ='{"name":"Teo","age":"18","addr":["北京","上海","广州"]}';
# var j = JSON.parse(jsonstr1);
# console.log(j.name);
# var jsonstr3 = JSON.stringify(j);
# console.log(jsonstr3);
BOM对象 浏览器对象模型
1. Window 可直接使用 window. 调用
属性
history
location
navigator
方法
alent() 弹出 消息框 警告框
confirm() 弹出 确认框 带有确定和取消按钮 返回一个 boolean值
# window.alert("Hello bom");
# var flag = window.confirm("您确认删除改记录吗?");
# window.alert(flag);
setInterval(Function,Number) 定时器 重复调用函数 参数分别是 函数 和 毫秒数
setTimeout(Function,Number) 定时器 调用函数一次
# var i = 0;
# function f(){
# i++;
# console.log("执行第" + i + "次");
# };
# window.setInterval(f,2000);
# window.setTimeout(f,5000);
2. Locaton 地址栏对象
属性
href 获取浏览器的地址
# var i = location.href; // 获取浏览器地址
# alert(i);
# location.href = "https://www.baidu.com"; // 可实现跳转
3. Navigator 浏览器对象
4. Screen 屏幕对象
5. History 历史记录对象 上一步 下一步
DOM 文档对象 把整个 html 的 每一个部分 封装成了对象 通过对象来改变 数据
Document: 整个文档对象
document.getElementById('id') 根据 id 属性 获取 返回一个Element 对象
document.getElementsByTagName('标签') 根据 标签 获取 返回一个数组
document.getElementsByName('name') 根据 name 属性 获取 返回一个数组
document.getElementsByClassName('class') 根据 class 属性 获取 返回一个数组
# <img id="img1" src="./img/news_logo.png">
# <div class="food">爆米花</div>
# <div class="food">大米粥</div>
# <input type="checkbox" name="hobby">旅游
# <input type="checkbox" name="hobby">学习
# <input type="checkbox" name="hobby">英语#
# var j = document.getElementById('img1');
# alert(j);
# var arr1 = document.getElementsByTagName('div');
# for (let i = 0; i < arr1.length; i++) {
# alert(arr1[i]);
# }
# var arr2 = document.getElementsByName('hobby');
# for (let i = 0; i < arr2.length; i++) {
alert(arr2);
# }
# var arr3 = document.getElementsByClassName('food');
# for (let i = 0; i < arr3.length; i++) {
# alert(arr3[i]);
# }
# var v1 = arr1[1]; 取出数组的数据 类型为 Element对象
# v1.innerHTML = "火龙果呀真好吃"; 调用 innerHTML 设置或返回元素的内容。
查询 标签封装成对应属性的方法
Browser Side --> 参考书 --> HTML对象 --> <div> --> Div 对象支持标准属性和事件 --> 属性 --> innerHTML
Browser Side --> 参考书 --> HTML对象 --> Image 对象属性
给 img 换图片 div追加字 input 勾选复选框
# <img src="./img/1.png">
# <div>爆米花</div>
# <div>大米粥</div>
# <div>棉花糖</div>
# <div>火龙果</div>
# <input type="checkbox" name="hobby">睡觉
# <input type="checkbox" name="hobby">学习
# <input type="checkbox" name="hobby">发呆
# var arr1 = document.getElementById('img1');
# arr1.src = './img/2.png';
# var arr2 = document.getElementsByTagName('div');
# for (let i = 0; i < arr2.length; i++) {
# const e = arr2[i];
# e.innerHTML += "<font color='red'>呀真好吃</font>"; //<font> 可给字体加红色
# }
# var arr3 = document.getElementsByName('hobby');
# for (let i = 0; i < arr3.length; i++) {
# const e = arr3[i];
# e.checked = true;
# }
Element: 元素对象
Attribute: 属性对象
Text: 文本对象
Comment: 注释对象
JS事件绑定
两种单机绑定方式
1. 在标签内 添加 onclick 属性 , 属性值是调用函数 对应函数在 JS中给出即可
2. 直接在JS中 根据id绑定到标签 element对象调用 onclick 属性, 此属性值是 函数
# <input type="button" value="不要点我呀!!" onclick="on()">
# <input type="button" value="点我呀!!" id = "click_me">
# function on() {
# alert("不要点我呀 ...");
# }
# var cl = document.getElementById('click_me');
# cl.onclick = function(){
# alert("使劲点呀 ... ")
# }
常用事件
onclick 鼠标单机事件
onblur 元素失去焦点
onfocus 元素获得焦点
onload 某个页面或图像被完成加载
onsubmit 当表单提交时触发该事件
onkeydown 某个键盘的键被按下
onmouseover 鼠标被移动到某元素之上
onmouseout 鼠标从某元素移开
..................................................................................................................
VUE
vue2 官网: https://v2.cn.vuejs.org/v2/guide/
两种方式 引入 vue
1. 使用 脚手架
2. 使用 <script> 引入
在官网 https://v2.cn.vuejs.org/v2/guide/ --> 下载 vue.js 的开发版本
参考下面的 根据入门程序中的引入
安装 谷歌浏览器的开发者共计 Devtools 工具
可以在 此网站 下载 https://chrome.zzzmh.cn/ --> Devtools
谷歌浏览器 --> 扩展程序 --> 管理扩展程序 --> 开发者模式 --> 把下载好的拖入即可 --> 打开 开关
关于 首次 打开 浏览器 --> 控制台的 两个提示
1. 提示 安装 Devtools 工具 . 安装上面的步骤安装上就会消失.
2. 提示 不要在成产环境中使用 开发版本. 可以在 Vue.config 配置文件中 改变 productionTip:false 即可
设置为false以阻止vue在启动时生成生产提示。 // 我用没生效 我也不知道为什么
<body>
<script type="text/javascript" >
Vue.config.productionTip = false
</script>
</body>
VUE 入门程序
<head>
<script src="js/vue.js"></script> // 使用 <script> 引入
</head> // 引入后 在浏览器的控制台中 键入 Vue 可以看到函数
<div id="app">
<input type="text" v-model="message"> // v-model 为 vue中的 指令
{{message}}
</div>
<script>
new Vue({ // 创建个 vue 对象
el: "#app", // el 是 element 简写 意思是 元素 相当于css的 id选择器 把 id是app的标签交到 vue代管
data: {
message: "hello vue"
}
})
</script>
指令
v-bind 可简化为: 省略v-bing 为HTML标签绑定属性值,如设置href css 样式等
v-model 在表单元素上创建双向数据绑定
v-on 为HTML标签绑定事件 click为单机事件
<script src="js/vue.js"></script>
<div id="app">
<a v-bind:href="url">最牛逼的网站!!!!</a> // url 相当于 变量
<a :href="url">最牛逼的网站!!!!</a> // v-bind 可以省略
<input type="text" v-model="url"> // 双向数据绑定 会获取 下面的 url的值 如果这个值改变了 其他值也会跟着改变
<input type="button" value="点我点我!!" v-on:click="handle()">
<input type="button" value="点我点我啊!!" @click="handle()"> // v-on 的缩写
</div>
<script>
new Vue({
el: "#app",
data: { // 数据模型中 声明 变量值的地方
url: "https://www.syk.my" // 定义 url 的值
},
methods: { // 声明方法的地方 与变量值的地方同级别
handle: function(){ // handle 方法
alert("讨厌... 你点我了一下...");
}
}
})
</script>
v-if
v-else-if 条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else
v-show 根据条件展示某元素,区别在于切换的是display属性的值
<script src="js/vue.js"></script>
<div id="app">
<input type="text" v-model="age">
<span v-if="age <= 40">年轻人</span>
<span v-else-if="age > 40 && age < 60 ">中年人</span>
<span v-else>老年人</span>
<br><br>
<input type="text" v-model="age">
<span v-show="age <= 40">年轻人</span> // v-show的使用
<span v-show="age > 40 && age < 60 ">中年人</span>
<span v-show="age > 60">老年人</span>
</div>
<script>
new Vue({
el: "#app",
data: {
age: 75,
},
})
</script>
v-for 列表渲染,遍历容器的元素或者对象的属性
<script src="js/vue.js"></script>
<div id="app">
<div v-for="addr in addrs">{{addr}}</div>
</div> // 第一个addr 是 变量 名字随便起 in 是关键字固定 addrs是数组的名字
<script>
new Vue({
el: "#app",
data: {
addrs:["北京", "上海", "西安", "成都", "深圳"]
},
})
</script>
vue 的生命周期 vue从创建到 销毁的 都会执行对应的方法
| 状态 | 阶段周期 |
| ------------- | -------- |
| beforeCreate | 创建前 |
| created | 创建后 |
| beforeMount | 挂载前 |
| mounted | 挂载完成 |
| beforeUpdate | 更新前 |
| updated | 更新后 |
| beforeDestroy | 销毁前 |
| destroyed | 销毁后 |
mounted 方法
Ajax 是 异步请求 早期的技术
Axios 封装了 Ajax 简化了Ajax操作
使用 Axios 发送 get 和 post 请求
<script src="js/axios-0.18.0.js"></script>
<input type="button" value="get" onclick="get()">
<input type="button" value="post" onclick="post()">
<script>
function get(){
axios({
method: "get",
url: "https://mock.apifox.cn/m1/3128855-0-default/emp/list"
}).then(result => {
console.log(result.data);
})
}
function post(){
axios({
method: "post",
url: "https://mock.apifox.cn/m1/3128855-0-default/emp/deleteById",
data: "id=1"
}).then(result => {
console.log(result.data);
})
}
</script>
使用 axios的 get 和 post方法 简化 代码
<script>
function get(){
axios.get("https://mock.apifox.cn/m1/3128855-0-default/emp/list").then(result => {
console.log(result.data);
})
}
function post(){
axios.post("https://mock.apifox.cn/m1/3128855-0-default/emp/deleteById","id=1").then(result => {
console.log(result.data);
})
}
</script>
Vue 项目 创建
# node -v // 需要安装node 环境
# npm config get prefix // 获取 nodejs 安装目录
# npm install -g @vue/cli // 安装vue 脚手架 功能
# set-ExecutionPolicy RemoteSigned // 修改 power shell 权限
# vue --version
# vue create vue-project // 第一种 命令行 创建vue项目
# vue ui // 第二种 图形化界面 创建vue项目
.vue 文件 组成
<template> 模板部分 由它生成HTML代码
</template>
<script> JS 代码 控制模板的数据来源和行为
</script>
<style> CSS样式部分
</style>
public/index.html 入口文件 在这里定义了div id="app" 引入main.js
src/main.js 入口文件 在此文件中 引入 App.vue 组件 代码由 vue 接管
src/App.vue 入口文件
安装 Vue element
https://element.eleme.cn/#/zh-CN/component/installation // 官网
# npm install element-ui@2.15.3 // 在项目根目录下安装
# vim src/main.js // 引入 element 组件 官网-->快速上手 有此代码
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
# mkdir -p src/views/element
# vim src/views/element/ElementView.vue // 写入基本内容
<template>
<el-row>
<el-button round>圆角按钮</el-button>
<el-button type="primary" round>主要按钮</el-button>
<el-button type="success" round>成功按钮</el-button>
<el-button type="info" round>信息按钮</el-button>
<el-button type="warning" round>警告按钮</el-button>
<el-button type="danger" round>危险按钮</el-button>
</el-row>
</template>
<script>
export default {
}
</script>
# vim src\App.vue
<template>
<div>
<element-view></element-view>
</div>
</template>
<script>
export default { // 声明出口 只有在这 export 才能在其他地方 import 导入
}
</script>
<style>
</style>
注:
api接口管理网址 https://apifox.com/
修改 power shell 权限
# set-ExecutionPolicy RemoteSigned
# set-ExecutionPolicy Default
......................................................................................................................
https://v2.cn.vuejs.org/
引包:
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> // 开发环境 包括一些注释 警告
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script> // 生成环境 去掉了注释 警告
插值表达式{{ }}
插值表达式是一种Vue的模板语法
1.作用:利用表达式进行插值,渲染到页面中
表达式:是可以被求值的代码,JS引擎会将其计算出一个结果
2.语法:{{ 化表达式 }}
(1)使用的数据必须存在(data)
(2)支持的是表达式,而非语句,比如:if for.…
(3)不能在标签属性中使用{{ }}插值
<div id="app">
<p>{{nickname }}</p>
<p>{{nickname.touppercase()}}</p>
<p>{nickname+'你好'}</p>
<p>{age>=18?'成年':'未成年'}</p>
<p>{{friend.name }}</p>
<p>{{friend.desc }}</p>
</div>
const app new Vue({
el:'#app',
data:{ // data 提供数据 变量:值
nickname:'tony',
age:18,
friend: {
name:'jepson',
desc:'热爱学习Vue'
}
},
methods: { // methods 提供方法
}
}
)}
谷歌浏览器安装 插件Vue Devtools
极简插件:https://chrome.zzzmh.cn/ --> Vue Devtools --> 下载 --> 开发者模式 --> 拖拽安装 --> 插件详情允许访问文件
vue 指令
v - 前缀的特殊 标签属性
v-html : 将这个元素的内容解析为 HTML 而不是纯文本
如果你有一个包含 HTML 标签的字符串,你可以使用 v-html 将其渲染为真实的 HTML,而不是简单的文本。
作用:设置元素的innerHTML
语法:V-html="表达式"
v-show
1.作用:控制元素显示隐藏
2.语法:v-show="表达式"表达式值true显示,false隐藏
3.原理:切换display:none控制显示隐藏
4.场景:频繁切换显示隐藏的场景
v-if
1.作用:控制元素显示隐藏 (条件渲染)
2.语法:V-f="表达式”表达式值true显示,false隐藏
3.原理:基于条件判断,是否创建或移除元素节点 根据判断条件控制元素的创建和移除(条件渲染)
4.场景:要么显示,要么隐藏,不频繁切换的场景
v-else
v-else-if
1.作用:辅助V-f进行判断渲染
2.语法:v-else
v-else-if="表达式'
3.注意:需要紧挨着v-f一起使用
v-on
1.作用:
注册事件
添加监听+
提供处理逻辑
2.语法:
v-on:事件名="内联语句"
v-on:事件名="methods中的函数名"
v-on:click 单机事件
@click 可以省略 v-on:
v-on:mouseenter 鼠标划入事件
<button v-on:click="count++">按钮</button>
@c1ick="fn(参数1,参数2)"
fn (a,b){}
<body>
<div id="app2">
<button @click="fn">切换显示隐藏</button>
<h1 v-show="isShow">黑马程序员</h1>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue
<script>
const app2 new Vue({ // 可理解为 创建个vue的对象 app2 ,
el:'#app2', // 管控的 <div>模块 对应 上面的 id="app2"
data:
isShow:true // 变量:值
},
methods:
fn (){
app2.isshow = !app2.isshow
//让提供的所有methods中的函数,this都指向当前实例 当前为 app2
this.isshow = !this.isshow
}
})
</script>
</body>
v-bind
1. 作用:动态的设置html的标签属性 src url title
2. 语法:v-bind:属性名="表达式”
3. 注意:简写形式 :属性名="表达式”
v-bind:src="imgUrl" 绑定属性. 把 src的属性.绑定 imagUrl变量上. 下面必须有变量的赋值
可简写 :src="imgUrl"
<body>
<div id="app">
<img v-bind:src="imgUrl" v-bind:title="msg alt="">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
const app new Vue({
el:'#app',
data:
imgUr1:'./imgs/10-02.png',
msg:'hello波仔'
})
</script>
</body>
按钮点击 上一页 下一页 切换图片
<body>
<div id="app">
<button @click="index-">上一页</button>
<div>
<img v-show="index > 0" src="list[index]" alt="">
</div>
<button v-show="index list.length - 1" @click="index+">下一页</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
const app new Vue({
el:'#app',
data: {
index:0,
list: [ // list: [ ] 数组
'./imgs/11-00.gif',
'./imgs/11-01.gif',
./imgs/11-02.gif',
"./imgs/11-03.gif',
./imgs/11-04.png',
./imgs/11-05.png',
]
}
})
</script>
</body>
v-for
1.作用:基于数据循环,多次渲染整个元素 → 数组、对象、数字.…
2.遍历数组语法:
v-for="(item,index) in 数组"
v-for="(item) in 数组" // 如果index用不上 可以 只写一个参数
v-for="item in 数组" // 如果只有一项 () 也可省略掉
item 是对象 表示 每一项
index 下标
<p v-for="...">我是一个内容</p>
<div id="app">
<h3>小黑水果店</h3>
<u1>
<li v-for="(item,index)in list"> // 在下面需要定义 list 数组
{{ item }} - {{ index }}
</1i>
</u1>
</div>
data: {
1ist:['西瓜','苹果','鸭梨','榴莲']
}
3.
v-for中的key
key作用: 给元素添加的唯一标识,便于Vu进行列表项的正确排序复用。
注意点:
1.key的值只能是字符串或数字类型
2.key的值必须具有唯一性
3.推荐使用id作为key(唯一),不推荐使用index作为key(会变化,不对应)
实现删除 功能
<div id="app">
<h3>小黑的书架</h3>
<u1>
<li v-for="(item,index)in booksList" key="item.id"> // v-for中的key
<span>{{item.name }}</span>
<span>{{item.author }}</span>
<!-~注册点击事件→通过d进行删除数组中的对应项-->
<button @click="del(item.id)"></button>
</1i>
</u1>
</div>
data:
booksList: [
{id:1,name:'《红楼梦》',author:'曹雪芹'},
{id:2,name:'《西游记》',author:'吴承恩'},
{id:3,name:'《水浒传》',author:'施耐庵'},
{id:4,name:'《三国演义》',author:'罗贯中'}
]
methods:{
del (id){
this.booksList.filter(item => item.id !== id) // 传过来的id 不等于 item 的id 则保留
// this.booksList = this.booksList.filter(item = item.id !== id) // 把得到的数组赋值给原数组
}
filter:根据条件,保留满足条件的对应项,得到一个新数组。 不会改变原来的数组
this.list.filter(item = item.id !=id)
v-model:
1.作用:给表单元素使用,双向数据绑定→可以快速获取或设置表单元素内容
数据变化→视图自动更新
视图变化→数据自动更新
2.语法:V-mode='变量'
用户名 密码 登录 重置 框
<div id="app">
<!-
v-model可以让数据和视图,形成双向数据绑定
(1)数据变化,视图自动更新
(2)视图变化,数据自动更新
可以快速[获取]或[设置]表单元素的内容
账户:<input type="text"v-model="username'"><br><br>
密码:<input type="password"v-model-="password"><br><br>
<button@click="1ogin">登录</button>
<button@click="reset">重置</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></sc
<script>
const app new Vue({
el:'#app',
data:
username
password:
},
methods:
login ()
console.log(this.username,this.password)
reset(){
}
综合 案例 小黑记事本
功能需求:
列表渲染
删除功能
添加功能
底部统计和清空
思维导图 制作
chat 生成一个 PlantUML
https://app.diagrams.net/?src=about --> +号 --> 高级 --> PlantUML