WEB前端

前端

  1. 前端技术主要是由HTML,CSS,JS,JQUERY等技术构成的web展示页面。
  2. HTML超文本标记语言主要实现页面的展示,形成静态网页。
  3. CSS层叠样式表实现页面美化。
  4. JS javascript脚本语言实现页面前端和后端的数据交互,形成动态网页。
  5. Vue 国人出品,阿里收购构建用户界面的渐进式框架,自底向上开发。
  6. NodeJS 基于 Chrome V8 引擎的 JavaScript 运行环境。

Web

  1. B/S:

    • 优点:直接使用浏览器就可以访问服务端程序

    • 缺点:浏览器具有一定的局限性,页面展示能力比较差,对网速的依赖很高

  2. C/S:

    • 优点:客户端可以任意设计网页的展示能力很强,对网速的需求较低。
    • 缺点:第一次使用时需要下载客户端软件

HTML

HTML标签

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>xuhangs</title>
	</head>
	<body>
		<h1>mohao1</h1>
		
		<h2>mohao1</h2>
		<h3>mohao1</h3>
		<h4>mohao1</h4>
		<h5>mohao1</h5>
		<h6>mohao1</h6>
		<a name="_top">java从入门到精通</a>
		<!-- 列表标签:
					ol + li 有序
					ul + li 无序
					type 定义列表符号,默认是 disc 小圆点
				 -->
				 <ol>
				 	<li>中国</li>
				 	<li>美国</li>
				 	<li>小日本</li>
				 </ol>
				<ul type="circle">
					<li>中国</li>
					<li>美国</li>
					<li>小日本</li>
				</ul>
				<ul type="square">
					<li>中国</li>
					<li>美国</li>
					<li>小日本</li>
				</ul>
				<ul type="disc">
					<li>中国</li>
					<li>美国</li>
					<li>小日本</li>
				</ul>
				<!--	图片标签:
							img向网页中引入图片 (相对路径/绝对路径)
							border:边框
							width:宽度
							height:高度
						 -->
						<img src="img/12.jpg" border="10px" width="50%" height="200%"><br>
						
	<a href="http://www.baidu.com"  target="_blank">baidu</a><br>
	<input type="text" placeholder="普通文本框"/>      普通文本框
	<input type="password" placeholder="密码" /> 密码
	<input type="radio"/>男   单选框
	<input type="email" />邮箱
	<input type="date" />时间1
	<input type="datetime" />时间2
	<input type="number" />   数字值
	<input type="week" />	日历
	<input type="checkbox" />杨幂  复选框
	<input type="button"  value="点我一下"/>
	<input type="submit"  value="提交数据"/>
	
	<p>
		<h1>流量调查表</h1>
	<table border="1" cellpadding="0" width="100%">
		<tr align="center">
			<th>总页面流量</th>
			<th>共计来访</th>
			<th>会员</th>
			<th>游客</th>
		</tr>
		<tr align="center">
			<td>1</td>
			<td>2</td>
			<td>3</td>
			<td>4</td>
		</tr>
		<tr align="center">
			<td>23</td>
			<td>23</td>
			<td>21</td>
			<td>12</td>
		</tr>
		<tr align="center">
					<td>232/td>
					<td>23</td>
					<td>23434</td>
					<td>342</td>
				</tr>
		<tr align="center">
					<td>平均每人浏览</td>
					<td colspan="3">32655</td>
				</tr>
	</table>
	
</p>


		<!--table表格标签 
				tr 表格里的行
				td 表格里的列
				border:表格的边框
				cellspacing:单元格的间距
				bgcolor:背景颜色
				width:宽度
				align:位置
			 -->
			 <p>
				 <table border="1px" cellspacing="0" bgcolor="antiquewhite" width="50%" align="center">
				<tr>
					<td colspan="2">11</td> <!-- colspan是列合并,合并2列-->
					<!-- <td>12</td> -->
					<td>13</td>
				</tr>
				<tr>
					<td>21</td>
					<td>22</td>
					<td rowspan="2">23</td> <!-- rowspan是行合并,合并2行 -->
				</tr>
				<tr>
					<td>31</td>
					<td>32</td>
					<!-- <td>33</td> -->
				</tr>
				</table>
				</p>
				<!-- get方式提交的数据都在地址栏里 http://127.0.0.1:8848/cgbtest/3.html?user=&pwd= -->
						<!-- <form method="get"> -->
						<!-- post提交安全不显示数据 -->
						<form method="post">
							<table border="1px" bgcolor="bisque" cellspacing="0" width="35%" cellpadding="3">
								<th colspan="2">注册表单</th>
								<tr>
									<td>用户名:</td>
									<td><input type="text" name="user"/></td>
								</tr>
								<tr>
									<td>密码:</td>
									<td><input type="password" name="pwd"/></td>
								</tr>
								<tr>
									<td>确认密码:</td>
									<td><input type="password" name="repwd"/></td>
								</tr>
								<tr>
									<td>昵称:</td>
									<td><input type="text" name="nick"/></td>
								</tr>
								<tr>
									<td>邮箱:</td>
									<td><input type="text" name="mail"/></td>
								</tr>
								<tr>
									<td>性别:</td>
									<td>
								<!-- 不配name属性,性别是多选!!  sex属性的值按照1 2 提交-->
				<!-- input中,type如果是radio或者checkbox的话,不配置value属性的话,默认提交on -->
										<input type="radio" name="sex" value="1"/><input type="radio" name="sex" value="2"/></td>
								</tr>
								<tr>
									<td>爱好:</td>
									<td>
									<!-- name必须配,多选 ,提交的值就是1 2 3 -->
									<input type="checkbox" name="like" value="1"/>篮球
									<input type="checkbox" name="like" value="2"/>足球
									<input type="checkbox" name="like" value="3"/>排球
									</td>
								</tr>
								<tr>
									<td>城市:</td>
									<td>
								<select name="city"> <!-- 实现多选,按name提交数据 1 2-->
											<option value="1">北京</option> 
											<option value="2">上海</option>
											<option value="3">广州</option>
											<option value="4">深圳</option>
											
										</select>
									</td>
								</tr>
								<tr>
									<td>头像:</td>
									<td>
										<input type="file" name="path"/>
									</td>
								</tr>
								<tr>
									<td>验证码</td>
									<td>
										<input type="text" />
										<img src="img/12.jpg" width="20px" />
										<input type="button" value="点我换一张"/>
									</td>
								</tr>
								<tr>
									<td>自我描述</td>
									<td>
										<textarea >
											描述信息·
											</textarea>
										</textarea>
									</td>
								</tr>
								<tr>
									<td colspan="2" align="center">
										<button type="submit">提交</button>
										<button type="submit">重置</button>
									</td>
								</tr>
							</table>
						</form>
			
			<!-- 其他标签 div  p  span -->
			<div>大家好</div>
			<div>大家好</div>
			<div>大家好</div>
			
			<p> Nice</p>
			<p> Nice</p>
			<p> Nice</p>
			
			<span> hello</span>
			<span> hello</span>
			<span> hello</span>
			<a href="#_top">回到顶部</a><!-- 获取_top的位置,像书签 -->
		
	</body>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<h1 align="left">学生信息管理系统MIS</h1>
		<form method="post">
			<table border="0px" cellspacing="0" cellpadding="4">
				<tr align="left">
				<th>姓名:</th>
				</tr>
				<tr>
					<td><input type="text" name="user" placeholder="请输入姓名....">
					</td>
					</tr>
				<tr>
					<th align="left">年龄:</th>
					</tr>
					<tr>
						<td><input type="number" name="age" placeholder="请输入年龄...."></td>
					</tr>
					<tr>
						<td>
							性别:
							<input type="radio" name="sex" value="1"/><input type="radio" name="sex" value="2"/></td>
					</tr>
						<tr>
							<td>
								爱好:
							<input type="checkbox" name="habits" value="1"/>乒乓球
							<input type="checkbox" name="habits" value="2"/>爬山
							<input type="checkbox" name="habits" value="3"/>唱歌</td>
						</tr>
						
							<tr>
								<td>
									学历:
									<select name="education">
										<option value="1">本科</option>
										<option value="2">研究生</option>
										<optionvalue="3">大专</option>
										<option value="4">中专</option>
									</select></td>
							</tr>
						
								<tr>
									<td>
										入学日期:
										<input type="week" />
										</td>
								</tr>
							
									<tr>
										<td colspan="2" align="center">
											<button type="submit">提交</button>
											<button type="submit">重置</button>
										</td>
									</tr>
							
			</table>
		</form>
	</body>
</html>

1.图片视频

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!--使用h5的播放音频 视频
		注意::浏览器默认规定视频音频不会自动播放,因为自动播放会占用流量-->
		<audio controls="controls">
			<source src="../../img/1212.mp3"></source>
		</audio>
		
		<!-- 加载mp4 视频
		注意::不能按网站方式访问,无法打开视频,直接按本地文件打开方式可以正常播放
					http://127.0.0.1:8848/cgb/video.html
				-->
		<p>
			<video controls="controls">
				<source src="../../img/videos/share1.mp4"></source>
			</video><br>
			<video controls="controls">
				<source src="../../img/videos/1.mp4"></source>
			</video><br>
		</p>
		
				<img src="../img/preview.jpg"/> 
	</body>
</html>


CSS

  1. CSS全称叫做层叠样式表stylesheet,是用来修饰HTML网页的一门技术,增强网页的展示能力。

    主要是使用CSS属性来实现,最终可以将css代码和HTML网页代码进行分离,也可以提高css代码的复用性。

选择器

标签名选择器
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>标签选择器测试</title>
		<style>
					div{
						background-color: red;
					}
					span{
						font-size: 50px;
					}
					input{
						font-size: 30px;
					}
				</style>
				
			</head>
			<body>
				<div style="background-color: beige;">中国</div>
				<div>韩国</div>
				<div>英国</div>
				
				<span>
					《唐诗三百首》<br>
					《奇谈闲论》<br>
				</span>
				
				<span>
					《假如给我三天光明》<br>
					《唐吉可德》<br>
				</span>
				<input type="button"   value="点我"  name="1"/>
			</body> 

class选择器
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>class选择器</title>
		<style>
		/**class选择器:给指定元素加class属性,通过.获取class的值*/
		.a{
			color: red;
			font-size: 70px;
		}
		.m{
			background-color: yellow;
			font-size: 40px;
		}
		</style>
		
	</head>
	<body>
		<div class="a">中国</div>
		<div class="m">韩国</div>
		<div>英国</div>
		
		<span class="a">
			《唐诗三百首》<br>
			《奇谈闲论》<br>
		</span>
		
		<span>
			《假如给我三天光明》<br>
			《唐吉可德》<br>
		</span>
		<input type="button"   value="点我"  name="1"/>
	</body>
</html>

id选择器
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试id选择器</title>
		<style>
			/*id选择器:给指定的元素加id属性,通过#获取id的值,值不要相同*/
			#a{
				font-size: 40px;
				font-family: "楷体" ;
			}
		</style>
		
	</head>
	<body>
		<div id="a">中国</div>
		<div >韩国</div>
		<div>英国</div>
		
		<span id="a" >
			《唐诗三百首》<br>
			《奇谈闲论》<br>
		</span>
		
		<span>
			《假如给我三天光明》<br>
			《唐吉可德》<br>
		</span>
		<input type="button"   value="点我"  name="1"/>
	</body>
</html>

分组选择器
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>分组选择器</title>
		<style>
			/*分组选择器:把多个选择器的结果组成一组,统一设置样式*/
			.b{
				color: red;
				font-size: 70px;
			}
			.m{
				background-color: #FFFF00;
				font-size: 40px;
			}
			#a{
				font-size: 40px;
				font-family: "楷体" ;
			}
			.b,.m,#a{
				border: solid red;
				border-radius: 25px;
			}
		</style>
	</head>
	<body>
		<div id="a">中国</div>
		<div class="b">韩国</div>
		<div>英国</div>
		
		<span class="m">
			《唐诗三百首》<br>
			《奇谈闲论》<br>
		</span>
		
		<span>
			《假如给我三天光明》<br>
			《唐吉可德》<br>
		</span>
		<input type="button"   value="点我"  name="1"/>
	</body>
</html>

属性选择器
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>属性选择器</title>
		<style type="text/css">
			/*属性选择器:按照指定属性选中元素*/
			input[type='text']{
			text-shadow: 5px 5px 5px  red;/* 加阴影 */
			text-align:center;/* 文字居中 */
		
	}
		</style>
	</head>
	<body>
		<div>中国</div>
		<div>韩国</div>
		<div>英国</div>
		
		<span>
			《唐诗三百首》<br>
			《奇谈闲论》<br>
		</span>
		
		<span>
			《假如给我三天光明》<br>
			《唐吉可德》<br>
		</span>
		<input type="text" name="1" /><br>
		<input type="button"   value="点我"  name="1"/>
	</body>
</html>

盒子模型
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试 盒子模型</title>
		<style>
			/* input[type='text']{
				margin: 10px;
				border:10px  dotted black;
			} */
		</style>
	</head>
	<body>
		<!--css盒子模型:就是把网页里的所有元素,都看作是一个个个小盒子
		内边距:padding是指内容和边框的距离
		外边距:margin是指盒子和盒子的距离
		边框:border是指边框的效果,宽度 颜色 实线
		点线:dotted,实线:solid,虚线:dashed-->
		<input type="text" placeholder="用户名"  style="padding: 20px; border: 2px dashed red;"/><br />
		<input type="text" placeholder="用户名"  style="padding-top: 20px;"/><br />
		<input type="text" placeholder="用户名"  style="padding-left: 50px;"/><br />
		<input type="text" placeholder="用户名"  style="padding-bottom: 20px;"/><br />
		<input type="radio" style="margin: 20px;" />男<br>
		<input type="radio" style="margin-left: 20px;" />男
	</body>
</html>

JavaScript

网页前后端是如何交互

  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FM0u5Bwp-1632484329159)(C:\Users\徐美富\Desktop\Blog\image\前后端交互.png)]

  2. 用户访问页面,页面触发事件创建XHR对象,进行ajax请求,请求访问服务器端,请求被web中间件拦截并进行处理,由控制层框架springmvc中的controller进行接收,controller请求业务层spring框架的service服务,service请求持久层mybatis框架的mapper映射,mapper访问数据库。操作完数据库,返回结果,mybatis封装成java对象传回service,service把java对象传回controller,controller把java对象又转换为json字符串,然后传回浏览器,浏览器传回给调用者XHR,XHR调用回调方法callback,callback进行json字符串的解析,从中拿到要展现的数据,通过javascript处理,最终回显到页面上。

    • 基于对象:它不仅可以创建对象,也能使用现有的对象。JS没有类的概念,也没有编译的过程。是一边解释一边执行。

    • 事件驱动:在JS中,大部分情况下都是通过事件触发驱动函数执行的,从而实现特定的功能。(比如点击div将内容替换为时间、当鼠标滑过元素,元素就有翻转的动态。)

    • 脚本语言:在网络前端开发环境下,用于嵌入在客户端浏览器中的一段小程序。

  3. 特点:

    (1)JS是一门直译式的语言,直接执行的就是源代码.

    是一边解释一边执行,没有编译的过程(不像Java需要提前编译为class文件再运行).

    (2)JS是一门弱类型的语言,没有严格的数据类型.

    优势:

    • 一定的安全性(JS被强制的要求,不能访问浏览器以外的东西,只能访问浏览器和浏览器内部的资源)
    • 良好的交互性
    • 跨平台性(Java语言具有跨平台性,是因为有虚拟机)

    只要有浏览器的地方都能执行JS

JS引入基本用法

  1. 注释
    • 单行注释: //注释内容
    • 多行注释: /* 注释内容 */
  2. 基本数据类型:包括:number/string/boolean/null/undefined
  3. 复杂数据类型:函数、数组、对象(自定义对象、内置对象、DOM对象、BOM对象…)
  4. js是弱类型语言,所有类型的变量都是用var关键字定义。并且参数的类型可以随时转换。
  5. javascript没有类似采用静态语言类型,如java的变量类型是编译期就确定的;而它采用了动态类型,也就是说在编译期类型不确定,运行时会动态根据变量的赋值来决定它的类型,这点比较灵活。这也是双刃剑,编译期就难以检查出其赋值的错误。
<html>
    <title>hello</title>
	<meta charset="utf-8"/>
	<script>/* JS代码 */
alert(100);
		function fn(){
			alert("111");
		}
	</script>
</head>
<body>
	<a href="#" onclick="fn();">鼠标点击事件...</a><br>
	<a href="#" onclick="alert(100)">dfs</a><br>
	<a href="#" ondblclick="alert(200)">鼠标双击</a><br>
	<a href="#" onmouseenter="alert(300)">鼠标划入</a><br>
	<a href="#" onmouseout="alert(400)">鼠标划出</a><br>
	
</body>
</html>
<!---->
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试JS的语言</title>
		<script>
			<!--内部JS-->
			//JS是弱类型的语言,也有几种:number string Boolean null undefined
			var a=10;
			a =1.9+2.6;
			a =1.9+2.1;
			a =1.9+2.6;
			a ="hello";
			a =true;
			a =null;
			a=undefined;
			alert(a);
			var b='123'+'2323';
			alert(b);//只定义而不赋值的变量,会得到提示undefined
			var c = 12;
			console.log(c);
		</script>
	</head>
	<body>
	</body>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			var a = 3;
			var b = 1;
			console.log(a+b);//4
			a+=4;
			console.log(a+b);//8
			//a+=4;
			console.log(a==b); //true
			console.log(a==="3"); //false  如果两边比较的值不是同一种数据类型,===直接返回false,如果是同一种数据类型,==和===没有区别!
			console.log("1"=="1"); //true   //由于JS中字符串是基本数据类型,比较字符串相等通过 == 进行!
			var a = 1;
			alert(a++);//1
			alert(++a);//3
			alert(++a+a+++a);//4+4+5
			alert(a>3?10:8);
			var b = 10;
			alert(a>b?a:b);//求两个数里的大数
			var c = 8;
			var d = a>b?(a>c?a:c):(b>c?b:c);
			alert(d);//三个数里的大值
			
			var e=1;
			var f='1';
			alert(e==f);//数据的值
			alert(e===f);//数据的值+类型
			
			//三元运算:比较两个数的最大值
			alert(2<3?1:0);
			var g =prompt("输入数字");//从浏览器输入的值
			var h =prompt("输入数字");
			alert(g>h?g:h);
			
			var i = 3;
			console.log(typeof i);//number
			i=true;
			console.log(typeof i);//boolean
			i="hello";
			console.log(typeof i);//string
			console.log(typeof 123+"abc");//numberabc
			console.log(typeof (123+"abc"));//string
		
			alert(typeof 100);
			
			
		</script>
	</head>
	<body>
	</body>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			//三元运算:比较两个数的最大值
			console.log(2<3?1:0);
			var g =prompt("输入数字");//从浏览器输入的值
			var h =prompt("输入数字");
			console.log(g>h?g:h);
			
			var i = 3;
			console.log(typeof i);//number
			i=true;
			console.log(typeof i);//boolean
			i="hello";
			console.log(typeof i);//string
			console.log(typeof 123+"abc");//numberabc
						console.log(typeof (123+"abc"));//string
						console.log(typeof 100);
		</script>
	</head>
	<body>
	</body>
</html>

循环

for循环
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试for循环</title>
		<script>
			for(var a=1;a<=10;a++){
				console.log(a);
			}
			//计算1-100里的4的倍数的和
			var sum=0;
			for(var i=1;i<101;i++){
				if(i%4==0){
					sum+=i;
				}
			}
			console.log(sum);
		</script>
	</head>
	<body>
	</body>
</html>

while循环
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试While</title>
		<script>
			var a=100000000;
			var b=0;
			while(a>1){
				a=a/2;
				b++;
			}
			console.log("总共花费"+b+"天");
		</script>
	</head>
	<body>
	</body>
</html>

选择结构

if-else语句
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试JavaScript中的ifelse</title>
		<!--HTML中引入JS代码-->
		<script>
		var i=3;
		if(i==4){
			console.log("yes");
		}else{
			console.log("no");
		}
		var a=prompt("请输入数字");
		if(100>=a&&a>=80){
			console.log("优秀");
		}else if(80>a&&a>=60){
			console.log("中等");
		}else if(60>a&&a>=0){
			console.log("不及格");
		}else{
			console.log("输入错误");
		}
	
		</script>
	</head>
	<body>
	</body>
</html>

switch-case结构
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试JS的switch case</title>
		<script>
			//alert()可以改为console.log();
			 var a =3;
			 console.log(a+a);
			 switch( a ){
			 	case 1: 
			 		console.log("今天是星期一");
			 		break;
			 	case 2: 
			 		console.log("今天是星期二");
			 		break;
			 	case 3: 
			 		console.log("今天是星期三");
			 		break;
			 	case 4: 
			 		console.log("今天是星期四");
			 		break;
			 	case 5: 
			 		console.log("今天是星期五");
			 		break;
				default:
					console.log("cw");
			 }
		</script>
	</head>
	<body>
	</body>
</html>

JS数组

  1. JS数组用于在单个的变量中存储多个值(其实就是一个容器)。

  2. JS中的数组可以存储例如:数值、字符串、布尔值、undefined、null、对象、函数等

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
		var arr1 = [];//声明一个空数组
			console.log( arr1.length ); //此时数组长度为 0
			arr1.length = 10;
			console.log( arr1.length ); //此时数组长度为 10
			arr1[99] = "abc";
			console.log( arr1.length ); //此时数组长度为 100
			arr1.length = 0;
			console.log( arr1.length ); //此时数组长度为 0


			var arr1 = new Array();//声明一个空数组
			var arr2 = new Array("abc", "hello", true);//声明一个具有初始值的数组
			console.log(arr2.length);//3
			console.log(arr2);
			var arr4 = [];//声明一个空数组
			console.log(arr4.length);//0
			arr4 = ["abc", "hello", true];//声明一个具有初始值的数组
			console.log(arr4);
			var arr=new Array(1,232,3343,4124,2343242,3242423);
			for(var a=0;a<arr.length;a++){
				console.log(arr[a]);
			}
			//增强for循环
			for(var i in arr){
				console.log(arr[i]);
			}
		</script>
	</head>
	<body>
	</body>
</html> 

JS函数

  1. 函数就是一个具有功能的代码块, 可以反复调用。
  2. 函数就是包裹在花括号中的代码块,前面使用了关键词 function
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			/* 声明:function 函数名称([参数列表]){ 函数体 }
			调用: 函数名称([参数列表]);
			案例: */
			
			a();//函数调用
			b(1,"2");//函数调用
			b(1,2);//函数调用
			function a(){ //无参函数定义
				var a = [1,2,3,4,5]; //定义数组
				var sum =0; //定义变量
				for (var i = 0; i <a.length; i++) {
					if(a[i]%2==0){
						sum+=a[i];
					}
				}
				alert(sum);
			}
			function b(x,y){//定义含参函数
				alert(x+y);
			} 
			function a3(a){
				return a;
			}
			function a4(a){
				return 'sds';
			}
			alert(a3);
			var s=a4();
			alert(s);
            var v = a3('java');
			alert(v+'你好');
		</script>
	</head>
	<body>
	</body>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			/* 声明:var 函数名称 = function([参数列表]){ 函数体 }
			调用: 函数名称([参数列表]);
			案例 */
			 //fn2();  //这种方式定义的函数还未加载就调用,会报错.方式1没问题
			var fn2 = function(){ //定义无参函数
				console.log(100);
			}
			fn2();  //函数调用
			var fn3 = function(x,y){  //定义含参函数
				console.log(x*y);
			}
			fn3(0.32,100);//函数调用
			fn2("王海涛");//参数个数不匹配,王海涛undefined
			var e = function(x,y){ //定义有返回值含参函数
				return x-y;
			}
			console.log("函数返回值:::"+ e(1.1,10.9) ); //函数调用
		</script>
	</head>
	<body>
	</body>
</html>

JS对象

  1. 利用function关键字声明对象,用new关键字创建对象。
内置对象
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>内置对象的测试</title>
		<!--Window对象-->
		<script>
			var a=window.prompt("数字"); 			//键盘输入会话框
			console.log(typeof a);
			var b = parseInt(a);
			console.log(typeof b);
			window.alert(100); 				//提示信息会话框
			window.confirm("text"); 			//确认会话框
			window.onload=function(){
				console.log(typeof 100);
			}; 		    //在浏览器加载完整个html后立即执行!
			
			window.document	;				//window.document返回document对象,代表整个网页文件
			window.document.write("你好");
			window.document.getElementById(id);
			window.document.getElementsByName(name);
			window.document.getElementsByClassName();
			window.document.getElementsByTagName();
			window.event;				//事件对象
			
		</script>
	</head>
	<body>

	</body>
</html>

自定义对象
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>内置对象的测试1</title>
		<script>
	
			//方法1:自定义对象
			function Person(){}//定义对象
			var p1 = new Person();//创建对象
			//动态绑定属性
			p1.name="张三";
			p1.age=20;
			console.log(p1);
			p1.color='red';
			p1.price=9.9;
			console.log(p1.color);
			console.log(p1.price);
			console.log(p1);
			//动态绑定函数
			p1.say=function(){
				console.log("hasasas");
			}
			//调用函数
			console.log(p1);
			
			//方法2:自定义对象
			var p2 = {
					"pname":"李四",
					"page":100,
					"psay":function(){
						/* this使用p2里定义的 */
						console.log(this.pname+this.page);
						console.log(100);
					}
				}
				console.log(p2);
				p2.psay();  /* 函数调用*/
		</script>
	</head>
	<body>
	</body>
</html>

DOM

DOM组成
  1. ECMAScript描述了javascript语言的语法和基本对象
  2. 文档对象模型DOM(Document Object Model)与HTML网页API接口
  3. 浏览器对象模型BOM(Browser Object Model),与浏览器进行交互的API接口
  4. 核心对象有:window浏览器窗口,navigator浏览器信息,location浏览器当前地址信息,history浏览器历史信息,screen用户屏幕信息。
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			function fun(){
				//通过id的值,获取元素
				 var x=document.getElementById("a");
				console.log(x);//打印元素
				console.log(x.innerHTML);//获取元素
				x.innerHTML="biansha";//设置内容
				//通过class的值,获取元素
				 var y=document.getElementsByClassName("b");
				 console.log(y);//得到数组
				 y[0].innerText="nihap";
				 console.log(y[0]);
				 
				 var z=document.getElementsByName("ps");
				 console.log(z);
				 z[0].innerHTML="dsd";
			}
		</script>
	</head>
	<body>
		<div onclick="fun()">我是div1</div>
		<div class="b">我是div2</div>
		
		<span id="a">我是span</span>
		<p name="ps">我是p1</p>
		<p>我是p2</p>
		<p>我是p3</p>
		<p>我是p4</p>
		<p>我是p5</p>
	</body>
</html>

总结

  1. 获取页面元素的4种方式:
    • getElementsByTagName 标签名称,得到数组
    • getElementsByName name属性,得到数组
    • getElementsByClassName class属性,得到数组
    • getElementById id属性,单个值

注:dom树在描述标签时除id方式,其它都是以数组形式体现,哪怕是一个元素。

JSON

概念

  1. ajax往往要完整应用还会配合一个技术:JSON,那什么是JSON呢?
  2. JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  3. JSON(JavaScript Object Notation,JS 对象简谱) 起名不咋地,非常拗口,我们就记住它是一种轻量级的数据交换格式即可。它基于 ECMAScript (js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。是xml的终结者,成为主流开发方式(ajax异步请求,json返回)。

作用

JSON 是存储和交换文本信息的语法。当数据在浏览器与服务器之间进行交换时,这些数据只能是文本。JSON 属于文本,并且我们能够把任何 JavaScript 对象转换为 JSON,然后将 JSON 发送到服务器。我们也能把从服务器接收到的任何 JSON 转换为 JavaScript 对象。以这样的方式,我们能够把数据作为 JavaScript 对象来处理,无需复杂的解析和转译。

语法

  1. JSON数据

    • var a =' "firstName" : "John" ' 
      
  2. JSON对象

    • var a = '{ "firstName":"John" , "lastName":"Doe" }'
      
  3. JSON数组

    • var a = '[{ "firstName":"Bill" , "lastName":"Gates" },{ "firstName":"George" , "lastName":"Bush" }]';
      

转换工具

  1. 使用JS里的内置对象JSON.用来把以 JSON 格式写的字符串 和 原生 JavaScript 对象互转.

  2. 给服务器发送数据: 将JS对象转成JSON字符串 	JSON.stringify(Js对象)
    接受服务器的数据: JSON字符串转成JS对象		JSON.parse("json字符串")
    

测试

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试json字符串</title>
		<script>
			//定义json数组
			var b='[{"firstName":"John","lastName":"Doe","lastNasdme":"Dodse"},{"firstName":"Josdhn","lastName":"Doedsd"}]';
			console.log(b);
			console.log(b.substr(3));
			console.log("============");
			//把json字符串和js对象互转---JSON工具
			//json字符串转成js对象:::为了调用属性,函数方便
			var sx=JSON.parse(b);
			console.log(sx);
			console.log(sx[1].firstName);//获取对象身上的属性值
			console.log(sx[0].lastName);//获取对象身上的属性值
			console.log("============");
			//js对象转成json字符串:::为了对字符串进行操作,给服务器发送数据
			var sx1=JSON.stringify(sx);
			console.log(sx1);
			console.log(sx1.substr(3));
			console.log("============");
			console.log("============");
			
			//1.定义json对象
			var a='{"firstName":"John","lastName":"Doe"}';//是JSON字符串,用来交互数据的格式
			var a1={firstName:"John",lastName:"Doe"};//JS对象,封装了属性函数
			console.log(a);
			console.log(a.substr(3));
			console.log(a.concat(123));
			console.log(a1);
			console.log("============");
			
			//1.定义json字符串
			var c='"firstName":"sdsdJohn"';
			console.log(c);
			console.log(c.length);
			console.log(c.concat(123));
			console.log(c.substr(3));
			//这里没有加大括号所以不可以转成JS对象
			var x=JSON.parse(c);
			console.log("============");
			console.log("============");
			console.log(x);
		</script>
	</head>
	<body>
		<div></div>
	</body>
</html>

HTML与json分离

1.js

var b='[{"firstName":"John","lastName":"Doe","lastNasdme":"Dodse"},{"firstName":"Josdhn","lastName":"Doedsd"}]';
			console.log(b);
			console.log(b.substr(3));
			console.log("============");
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../../js/1.js"></script>
	</head>
	<body>
	</body>
</html>

JQuery

ajax

概述

  1. AJAX = Asynchronous JavaScript And XML. AJAX 并非编程语言。
    Ajax 允许通过与场景后面的 Web 服务器交换数据来异步更新网页。这意味着可以更新网页的部分,而不需要重新加载整个页面。
  2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hBX1TVm7-1632484329161)(C:\Users\徐美富\Desktop\Blog\image\ajax原理图.png)]

核心对象XMLHttpRequest

  1. 所有现代浏览器都支持 XMLHttpRequest 对象。
    XMLHttpRequest 对象用于同幕后服务器交换数据。这意味着可以更新网页的部分,而不需要重新加载整个页面。

测试

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title> 原生js提交form数据</title>
	</head>
	<body>

		<form  method="post" id="form">
		    <table style="margin: 30px;">
		        <h2 style="padding-left: 100px;">学生管理系统</h2>
		        <tr>
		            <td>姓名:</td>
		        </tr>
		        <tr>
		            <td>
		                <input type="text" name="name"  placeholder="请输入姓名..."/>
		            </td>
		        </tr>
		        <tr>
		            <td>年龄:</td>
		        </tr>
		        <tr>
		            <td>
		                <input type="text" name="age" placeholder="请输入年龄..."  />
		            </td>
		        </tr>
		        <tr>
		            <td>
		                性别:(单选框)
		                <input type="radio" name="sex" checked="checked" value="0"/>男
		                <input type="radio" name="sex" value="1" />女
		            </td>
		        </tr>
		        <tr>
		            <td>
		                爱好:(多选)
		                <input type="checkbox" name="hobby" checked="checked" value="ppq"/>乒乓球
		                <input type="checkbox" name="hobby" value="ps"/>爬山
		                <input type="checkbox" name="hobby" value="cg"/>唱歌
		            </td>
		        </tr>
		        <tr>
		            <td>
		                学历:(下拉框)
		                <select name="edu">
		                    <option value ="1">本科</option>
		                    <option value ="2">专科</option>
		                    <option value ="3">研究生</option>
		                </select>
		            </td>
		        </tr>
		        <tr>
		            <td>
		                入学日期:
		            </td>
		        </tr>
		        <tr>
		            <td>
		                <input type="date" name="intime"/>
		            </td>
		        </tr>
		        <tr>
		            <td>
		                <input type="button" value="保存" onclick="change()"/>
		                <input type="reset" value="取消" />
		            </td>
		        </tr>
		    </table>
		</form>

		<script>
			function change(){
				// 1. 创建xhr对象,用于同幕后服务器交换数据
				var xhr = new XMLHttpRequest();
				// 2. 定义当 readyState 属性发生变化时被调用的函数
				xhr.onreadystatechange=function(){
					//3. status是200表示请求成功,readyState是4表示请求已完成且响应已就绪
					if(this.status==200 && this.readyState==4){
						// document.getElementById("d1").innerHTML="hi ajax";
						//5.以字符串返回响应数据,并展示
						// document.getElementById("d1").innerHTML=this.responseText;
						console.log(this.responseText);
					}
				}
				//3.规定请求的类型(请求方式,文件位置,异步)
				//xhr.open('get','1.json',true);  //请求本地的json文件
				//xhr.open('get','http://localhost:8080/car/get',true);   //请求本地的服务器程序
				// xhr.send(); //发送get请求
				xhr.open('post','http://localhost:8080/stu/add',true);
				//4.xhr将请求发送到服务器
				var formdata=new FormData(  document.getElementById("form")  );
				xhr.send(formdata);   //发送post请求
			}
		
		</script>
		
		
	</body>
</html>

vue的ajax

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RDRYCCF-1632484329164)(C:\Users\徐美富\Desktop\Blog\image\vue的ajax.png)]

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>ajax</title>
		
		<script src="vue.js"></script>
		<script src="axios.min.js"></script>
		
	</head>
	<body>
		<div id="app">
			{{info}}
		</div>
		<script>
			new Vue({
				el:"#app",
				data:{
					info:''
				},
				 // 发ajax请求,用以获取数据
				mounted:function(){
					// axios.get('1.json').then(业务)//可以的读取文件里的json数据
					axios.get('http://localhost:8080/hi').then(     //可以跨域请求服务器数据
						a => ( //a就是访问成功后返回的数据
							// this.info = a.data.name  
							this.info = a.data //data已经是js对象了
						)	
					).catch(function (e){
						console.log(e)
					})
				}
			})
		</script>
	</body>
</html>


或者

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-03IYWovf-1632484329166)(C:\Users\徐美富\Desktop\Blog\image\0eajax.png)]

Vue

概述

Vue是一个渐进式的前端框架. 渐进式是指按需配置

安装Vue

  1. 官网

    https://cn.vuejs.org/ #官网
    
    https://cdn.jsdelivr.net/npm/vue/dist/vue.js #下载最新版本
    
    
  2. 特权

    • 一个轻量级的mvvm框架,双向绑定,数据动态更新,gzip后大小只有20k+
    • 是一个渐进式框架,其核心思想是数据驱动、组件化的前端开发
    • 原生html页面是通过js 操作的是dom,而vue.js操作的是数据。
    • 和传统前端开发开发的关注点完全不同,传统方式关注的是都像的document结构的api,而vue关注的是数据。
    • 优点显而易见,从而屏蔽了使用复杂晦涩难记的dom结构api。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8nTwd2bs-1632484329168)(C:\Users\徐美富\Desktop\Blog\image\vue.png)]

  3. <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title>测试vue</title>
    		<script src="../../js/vue.js"></script>
    	</head>
    	<body>
    		<!--准备数据渲染区,{{msg}}叫插值表达式,是vue的固定语法,
    		获取msg变量的值,这里的msg是变量-->
    		<div id="app">{{msg}}</div>
    		<!--导入vue.js.vue就提供了Vue的工具,想用就new-->
    		{{msg}}
    		<script>
    			//准备数据(js对象)
    			var b={
    				msg:"sdsd"
    			}
    			//把数据渲染到挂载点
    			var com={
    				//el属性是用来描述元素(挂载点),data属性是具体要展示的数据
    				el:"#app",//通过css提供的id选择器,选中了id=a的元素
    				data:b//即将把b的数据渲染在挂载点
    			}
    			//准备Vue对象
    			var v = new Vue(com);
    		</script>
    			
    	</body>
    </html>
    
    
  4. <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title>测试vue1</title>
    		<script src="../../js/vue.js"></script>
    	</head>
    	<body>
    		<!--准备数据渲染区,{{msg}}叫插值表达式,是vue的固定语法,
    		获取msg变量的值,这里的msg是变量-->
    		<div id="app">{{msg}}</div>
    		<!--导入vue.js.vue就提供了Vue的工具,想用就new-->
    		{{msg}}
    		<script>
    			new Vue({
    				//el属性是用来描述元素(挂载点),data属性是具体要展示的数据
    				el:"#app",//通过css提供的id选择器,选中了id=a的元素
    				data:{
    					msg:"sdsd"
    				}//即将把b的数据渲染在挂载点
    			})
    		</script>
    	</body>
    </html>
    
    
  5. <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<script src="../../js/vue.js"></script>
    	</head>
    	<body>
    		<div id="as">{{sds}}{{as}}</div>
    		
    		<script>
    			new Vue({
    				el:"#as",
    				data:{
    					sds:"sdsdsdsdsd",
    					as:"name"
    				}
    			})
    		</script>
    	</body>
    </html>
    
    
  6. MVVM框架

  7. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oJAZKYTW-1632484329170)(C:\Users\徐美富\Desktop\Blog\image\MVVM.png)]

  8. 上面看似结构非常简单,其实却深藏奥秘。和传统框架不同,Vue采用了最新的MVVM框架,它最大的特点就是:传统js机制操作的是页面,如我们之前写的html+css+js案例,大家会发现页面和页面里的数据混杂在一起。

  9. 而MVVM框架体系引入后端早已深入人心的分层思想,是后端MVC框架的延伸,实现把数据和页面分离。我们可以在页面布局好后,只对数据进行操作,当数据改变,页面上的内容会自动随之改变,而无需开发者开发专门的代码去改变,如之前ajax技术实现的局部刷新。

  10. 简而言之,MVVM框架实现了页面和数据的分离,代码结构更加清晰,责任更加明确,同时实现自动化,数据变化,页面随之变化,无需写代码,非常棒的一个改进。这是javascript、jquery、bootstrap等无法做到的,也是前端为何开始推崇Vue这些框架的根本原因,也标示着jquery的终结。

  11. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fHudsMqC-1632484329170)(C:\Users\徐美富\Desktop\Blog\image\vue展示.png)]

基础语法

运算符
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试Vue的运算符</title>
		<script src="../../js/vue.js"></script>
	</head>
	<body>
		<!--准备数据渲染区-->
		<span id="app">
		<p>减法:{{a-b}}</p>	
		<p>加法:{{2+3}}</p>
		<p>减法:{{2-3}}</p>
		<p>乘法:{{2*3}}</p>
		<p>除法:{{2/3}}</p>
		<p>取模:{{2%3}}</p>
		<p>自增:{{age++}}</p>
		<p>自减:{{age--}}</p>
		<p>三元表达式: {{age>10?'yes':'no'}}</p>
		<p>字符串操作:</p>
		<p> {{str}} </p>
		<p>{{str.length}}</p>
		<p>{{str.concat(1000)}}</p>
		<p>{{str.substr(3)}}</p>
		</span>
		<script>
			new Vue({
				el:"#app",
				data:{
					str:"hellovue~",
					age:12,
					a:1,
					b:2
					}
			})
		</script>
	</body>
</html>
方法methods
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>vue数据的写法</title>
	
		<script src="../../js/vue.js"></script>
		
	</head>
	<body>
		<div id="app">
			<!-- vue的事件,使用v-on调用指定函数 -->
			按钮1:<button onclick="alert(100)">点我</button>
			按钮2:<button v-on:click="show()">点我</button>
			<h2>  vue调用无参函数:{{ show() }}  </h2>
			<h3>  vue调用含参函数:{{ sysout(100) }}  </h3>	
		</div>
		<script>
		
				new Vue({
					el:"#app",//挂载点
					data:{
						address:"北京",
						name:"张三",
						age:20,
						person:{
							name:"jack",
							age:18,
							salary:1100
							},
						hobby:["唱","跳","rap"],
						url:"https://act.codeboy.com/"
					},
					methods: { /* 必须在methods里,创建Vue函数 */
						show:function(){ 
							console.log('hello vue');
						},
						sysout: function(color){
							console.log(color);
						}
					}
				});
		
		</script>

	</body>
</html>
  • 方法必须写在methods代码段中
  • 方法体中访问数据代码段中声 明的变量,前面加this
  • 方法和属性声明方式的差异在于 function(){}
  • 方法和属性调用的差异是 {{msg}} {{sayHello()}},名称后加小括号
Vue解析数据
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>hello vue</title>
		
		<!-- 导入js -->
		<script src="vue.js"></script>
		
	</head>
	<body>
		<div id="app"> 
			<h1>
				vue解析变量:{{str}} {{str.length}} 
				{{str.replace('l','666')}} {{str.concat(123)}}
				{{num}}  {{num+10}} {{num/3}} {{num%4}}
				{{num>5?1:0}} 	{{num--}}
			</h1>
			<h2>vue解析对象:{{p.name}} {{p.age}} </h2>
			<h2>vue解析数组:{{arrays[1].name}} {{arrays[0].age}} </h2>
			
			<h2>vue调用函数的语法:{{sout()}} </h2>
			<button v-on:click="add(1,2)">点我</button>
			<button @click="add(1,2)">点我</button>
		</div>
		<script>
			var vm = new Vue({
				el:"#app", //数据挂载点
				data:{
					str:"hello vue",
					num:10,
					p:{//vue定义对象
						name:"lisi",
						age:20
					},
					arrays:[//vue定义数组
						{
							name:"zhangsan",
							age:20
						},
						{
							name:"wangwu",
							age:30
						}
					]
				},
				methods:{//vue定义方法
					sout:function(){
						console.log(100);
					},
					add:function(a,b){ //含参方法
						console.log(a+b);
					}
				}
			})
		</script>
	</body>
</html>
三种data值的写法
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>vue里data的三种写法</title>
		<script src="../../js/vue.js"></script>
		
	</head>
	<body>
		<div id="app">{{msg}}</div>
		<script>
		
				new Vue({
					el : "#app" ,
					// 数据的三种写法:标准写法
					// 第一种形式
					// data : {
					// 	msg : "hello vueeee~~~"
					// }
					// 第二种形式:定义函数,返回对象
					// data:function(){
					// 	return {
					// 		msg:"hi~vue"
					// 	}
					// },
					// 第三种形式:定义函数,es6的简写法
					data(){
						return {
							msg:"vue hi~"
						}
					}
				});
	
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../../js/vue.js"></script>
	</head>
	<body>
		<div id="app">name属性的值是:{{a.name}}
		<p>age属性的值是:{{a.age}}</p>
		<p>{{a.show()}}</p>
		<p>bname属性的值是:{{ b.name }}, </p>
		<p>abge属性的值是:{{b.age}}  </p>
		<p>调用函数: {{a.show()}}   </p>
		<p>解析数组里的数据(利用下标):
		{{c[0].fristname}}</p>
		</div>
		
		<script>
			new Vue(
			{
			el:"#app",
			data:{
				a:{
					name:"xuhang",
					age:12,
					show(){
						alert(23);
					}
				},
				b : {
					name : "rose",
					age : 30
					},
				c : [//数组::::[ { k:v , k:v} ,{ k:v , k:v } 
				{fristname : "jack",lastname : 123},
				{fristname : "rose",lastname : 456}
				]
			}
			})
		</script>
	</body>
</html>

高级用法:v-命令

指令集
  1. 指令是带有 v- 前缀的特殊属性,以表示它们是 Vue 提供的特殊特性。
  2. 指令用于在表达式的值改变时,将某些行为应用到 DOM 上。
  3. 常见的Vue指令:v-if v-for v-on v-bind v-model v-cloak等
双向绑定 v-model

通过指令v-model,实现双向绑定,修改一方同时修改相同的另一方,达到数据同时更新。MVVM是将"数据模型双向绑定"的思想作为核心,在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此View视图的数据的变化会同时修改Model数据源,而Model数据源数据的变化也会立即反应到View视图上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2eLn7nd-1632484329171)(C:\Users\徐美富\Desktop\Blog\image\双向绑定.png)]

闪现 v-cloak
  1. F12打开Chrome的调试窗口,选中NetWork,在选择Slow3G,观察问题。
  2. 遇到插值表达式加载时闪烁对用户不好的现象,那怎么解决呢?
  3. 在标签中增加指令:v-cloak
  4. 增加style标签,[v-cloak]属性选择器,设置先不展示display:none;
  5. 实现在页面未渲染完成时先隐藏标签,渲染完成后在展示,这样就解决了闪烁问题
判断 v-if
  1. v-if指令将根据表达式 seen 的值( true 或 false )来决定是否插入 p 元素
  2. v-show靠页面的样式进行控制,未显示但内容已在页面上,而v-if内容是不在的
  3. v-if判断是否加载,可以减轻服务器的压力,但在需要时加载有更高的切换开销;v-show调整DOM元素的CSS的dispaly属性,可以使客户端操作更加流畅,但有更高的初始渲染开销。如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
事件 v-on

@click为v-on:click的缩写

绑定 v-bind

当属性的值是变量而不是字符串时,通过v-bind进行标识,vue会自动处理

  • 全称: v-bind:href
  • 简称: :href 冒号开头就说明后面跟的是变量
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>测试Vue的指令</title>
		<script src="../../js/vue.js"></script>
		<style>
			[v-cloak]{
				display: none;
			}
		</style>
	</head>
	<body>
		<div id="app" v-cloak>
		{{msg}}
		<!--双向绑定-->
		<input type="text" v-model="msg" /><br>
		<span>{{age}}</span><br>
		<!--v-if用来判断的,满足了条件才展示-->
		<!--v-if和v-show的区别:都可以判断,但是后者
		即使不满足条件也会被网页加载了只是隐藏了-->
		<p v-show="age>=18">sds</p>
		<!--v-if和v-else-if和v-else组合判断条件-->
		<span v-if="age>=68">老年人</span>
		<span v-else-if="age>=25">青壮年</span>
		<span v-else-if="age>18">少年</span>
		<span v-else>未成年人</span><br>
		用下标获取数组中的元素:{{score[0]}},{{score[1]}},{{score[2]}}<br />
		<!--v-for用来循环的,o是取到的数据,arr是数组名,相当于增强for循环-->
		用v-for获取数组中的元素:
		<h1 v-for="o in score">{{o}}</h1>
		用v-for获取数组中的元素:
		<h1 v-for="o,i in score">下标是:{{i}},数据是:{{o}}</h1>
		<!--v-on用来绑定事件,点击按钮时触发函数,@是一种简写形式简化了v-on:-->
		<button v-on:click="show()">点我</button>
		<button v-on:dblclick="show()">双击点我</button><br>
		<button @click="show()">点我</button>
		<button @dblclick="show()">双击点我</button><br>
		<!--v-bind用来获取变量的值-->
		<a href="{{url}}">连接1</a><br>
		<a v-bind:href="url">连接2</a><br>
		<a :href="url">连接3</a>
		</div>
		
		<script>
			new Vue({
				el:"#app",
				data:{
					msg:"你好",
					age:17,
					score:["ysd","sdsa","sdad"],
					url:"https://www.baidu.com/"
				},
				methods:{
					show:function(){
						console.log('爱我没见过')
					}
				}
			})
		</script>
	</body>
</html>

Vue组件

概述
  1. 组件(Component)是 Vue.js 最强大的功能之一。
  2. 组件可以扩展 HTML 元素,封装可重用的代码。
  3. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树
使用
  1. 注册一个全局组件(所有实例都能用)语法格式如下:
  2. Vue.component(tagName, options)
  3. tagName 为组件名,options 为配置选项。注册后,我们可以使用以下方式来调用组件:
  4. 也可以注册一个局部组件(只能在这个实例中使用)
测试
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>全局组件定义</title>
	</head>
	<body>
		
		<div id="app">
			<!-- 如果需要使用组件,则在vue渲染区中中使用 -->
			<!-- 规则:
					1.在vue中使用标签时默认都是小写字母.如果需要
					引入驼峰规则.则使用-线代替.
					2.使用组件通过标签引用
			 -->
			<add-num-com></add-num-com>
			<add-num-com></add-num-com>
			<add-num-com></add-num-com>
		</div>
		<!-- 定义模板标签语法 必须有根标签-->
		<template id="numTem">
			<div>
				<h1>我是一个组件</h1>
				获取数值: {{num}}
			</div>
		</template>
		<!-- 1.导入JS -->
		<script src="../js/vue.js"></script>
		<!-- 2.定义全局组件 -->
		<script>
			/* 
				组件的定义
				参数:
					1.组件名称
					2.组件实体内容
			 */
			Vue.component("addNumCom",{
				//属性
				data(){
					return {
						//自定义属性
						num: 100
					}
				},
				//页面标记
				template: "#numTem"
			})
			/* 2.实例化vue对象 找到区域交给vue渲染 */
			const apps = new Vue({
				el: "#app"
			})
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>局部组件定义</title>
	</head>
	<body>
		<div id="app">
			<msg-com></msg-com>
			<msg-com></msg-com>
		</div>
		<!-- 定义app2 局部组件只能在特定位置使用,
		 所以该位置 不能解析-->
		<div id="app2">
			<msg-com></msg-com>
			<msg-com></msg-com>
		</div>
		<!-- 模板标签必须定义在vue渲染div外边 -->
		<template id="msgTem">
			<div>
				<h3>我是一个局部组件</h3>
			</div>
		</template>
		
		<script src="../js/vue.js"></script>
		<script>
			let msgCom = {
				template: "#msgTem"
			}
			//定义局部组件 只对当前vue对象有效
			const app = new Vue({
				el: "#app",
				components: {
					//key: value
					//msgCom: msgCom,
					//如果在JS中key-value一样的.可以只写一个
					msgCom
				}
			})
			
			const app2 = new Vue({
				el: "#app2",
			})
		</script>
	</body>
</html>

Vue路由

概述

说明: 用户发起一个请求,在互联网中经过多个站点的跳转.最终获取服务器端的数据. 把互联网中网络的链路称之为路由. (网络用语)
VUE中的路由: 根据用户的请求URL地址,展现特定的组件(页面)信息. (控制用户程序跳转过程)

路由入门案例
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>路由入门案例</title>
	</head>
	<body>
		<div id="app">
			<h1>实现路由案例</h1>
			<!-- 2.定义路由标签
				1.a标签说明
				标签说明: a标签 超链接标签
						 href属性: 请求跳转的地址
				<a href="http://www.baidu.com">百度</a>
				2.路由标签说明
					router-link 解析为a标签
					to 解析之后变成 href属性
			 -->
			 <router-link to="/home">主页</router-link>
			 <router-link to="/welcome">欢迎主页</router-link>
			 <!-- 3.指定路由填充位(占位符)
				需要给组件一个展现的位置,需要提前定义.
			 -->
			 <router-view></router-view>
		</div>
		<!-- 定义template标签 -->
		<template id="homeTem">
			<div>
				<h1>这里是系统首页</h1>
			</div>
		</template>
		
		<template id="welcomeTem">
			<div>
				<h1>这里是系统首页s</h1><br />
				<a href="http://baidu.com">baidu</a>
			</div>
		</template>
		<!-- 1.引入JS 路由需要依赖vue 注意顺序-->
		<script src="../js/vue.js"></script>
		<script src="../js/vue-router.js"></script>
		
		<script>
			<!-- 4.封装路由对象  -->
			let HomeCom = {
				template: "#homeTem"
			}
			let WelcomeCom = {
				template:"#welcomeTem"
			}
			let router = new VueRouter({
				//routes 定义请求与组件的映射关系
				routes: [
					{path: "/home", component: HomeCom},
					{path:"/welcome", component:WelcomeCom}
				]
			})
			/* 5.实现路由对象绑定 */
			const app = new Vue({
				el: "#app",
				//router: router
				router
			})
		</script>
	</body>
</html>


Vue路由的嵌套
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>路由的嵌套</title>
	</head>
	<body>
		
		<div id="app">
			<h1>江哥动物园</h1>
			<router-link to="/tiger">老虎</router-link>
			<router-link to="/lion">狮子</router-link>
			<router-view></router-view>	
		</div>
		
		<template id="tigerTem">
			<div>
				<h1>我是一只凶猛的喵</h1>
				<img src="../img/老虎.jpeg"/>
			</div>
		</template>
		
		<template id="lionTem">
			<div>
				<h1>我是狮子王 辛巴!!!!</h1>
				<img src="../img/狮子.jpeg"/>
				<h3>
					<!-- 实现路由的嵌套机制 -->
					<router-link to="/lion/one">猫咪</router-link>
					<router-link to="/lion/two">iu</router-link>
					<!-- 子级应该在该区域展现数据!!!! -->
					<router-view></router-view>
				</h3>
			</div>
		</template>
		
		<template id="oneTem">
			<div>
				<h1>我是原配-老大</h1>
				<img src="../img/猫咪.jpg"/>
			</div>
		</template>
		
		<template id="twoTem">
			<div>
				<h1>我是iu-更喜欢我!!!</h1>
				<img src="../img/iu.jpeg"/>
			</div>
			
		</template>
		<!-- 1.引入JS 路由需要依赖vue 注意顺序-->
		<script src="../js/vue.js"></script>
		<script src="../js/vue-router.js"></script>
		
		<script>
			let tigerCom = {
				template: "#tigerTem"
			}
			let lionCom = {
				template: "#lionTem"
			}
			let oneCom = {
				template: "#oneTem"
			}
			let twoCom = {
				template: "#twoTem"
			}
			/* 
				1.如果需要在App根标签中跳转,则写到routes根目录下
				2.如果需要进行父子嵌套,则应该使用children属性
				3.如果使用children属性,则在自身的router-view展现数据
			 */
			let router  = new VueRouter({
				routes: [
					{path:"/", redirect:"/lion"},
					{path: "/tiger",component: tigerCom},
					{path: "/lion",component: lionCom, 
						children: [
							{path: "/lion/one",component: oneCom},
							{path: "/lion/two",component: twoCom},
							],
					}
					]
			})
			const app = new Vue({
				el: "#app",
				router
			})
		</script>
	</body>
</html>

Vue进阶

构建Vue项目 lifecycle+npm+webpack

Vue的生命周期 lifecycle
  1. 使用vue做项目时,我们需要了解vue对象的生命周期和生命周期函数(Vue 实例从创建到销毁的过程),这样才能知道哪些事情应该在哪个函数里做。
  2. 如页面创建时,页面加载时,页面更新时,页面销毁时?
  3. 在这过程中,我们在每个特定阶段会触发一些方法(这些方法具备一些功能),我们给这些方法起了名字叫做生命周期钩子函数/组件钩子。
  4. 生命周期函数:
    • vue实例在某一个时间点会自动执行这些函数;

    • 生命周期钩子函数不允许写成箭头函数;

    • 可以分为3个阶段,一共8个钩子:初始化阶段(创建前/后, 载入前/后),运行中(更新前/后),销毁(销毁前/销毁后)

细分每个过程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TiN5Vhkx-1632484329172)(C:\Users\徐美富\Desktop\Blog\image\vue.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-liCwdrmJ-1632484329173)(C:\Users\徐美富\Desktop\Blog\image\挂载.png)]

npm概念
  1. 官网:英文官网:https://docs.npmjs.com/about-npm
  2. 中文官网:https://www.npmjs.cn/
  3. webpack:https://webpack.js.org/
vue-cli脚手架
  1. 安装nodejs并验证

    • node -v # v8.11.3,至少8以上,最新的是v15.11.0

    • npm config get registry # 查看当前配置的镜像,结果是默认的国外网址https://registry.npmjs.org/
      
      npm config set registry https://registry.npm.taobao.org #设置成淘宝镜像
      
      npm config get registry #再获取查看,结果是修改后的https://registry.npm.taobao.org/ 
      
      
    • -i 安装指令,全拼: install
      -S 生产环境,全拼: --save
      -D 开发环境,全拼: --save—dev
      -O 可选依赖,全拼: --save—optional
      -E 精确安装指定模块版本,全称:--save—exact
      -g 全局安装,全拼: --global
      
脚手架安装
npm install vue-cli -g #安装vue-cli脚手架---可能比较慢,要等几分钟

npm uninstall vue-cli -g #卸载vue-cli脚手架 --- 大可不必

vue –V #查看版本

where vue #vue安装在哪里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值