ES6语法介绍+Vue快速上手+使用elementUI完成分页+运用SpringBoot +RestFlu + vue + elementUI完成的案例

ES6

1.什么是ECMAScript?

全称:ECMAScript (ECMA:欧洲计数机制造协会),其实就是JavaScript

2.ES5和ES6的一些新特性

2.1.let 和 const 命令
	let  定义局步变量
	let关键字是ES6的规范,idea默认支持的是ES5.1 		
	const:常量
2.2.字符串的扩展
	String的原始的方法有:
	    * indexOf:返回字符串的索引
		* lastIndexOf:返回字符串的最后的索引
		* length:获取字符串的长度
		* substr(i,v):从第i个索引开始截取v个长度的字符
		* substring(i,v):从第i个索引开始截取v个位置(不包含v)
		* charAt(i):获取第i个位置的字符
		* concat:字符串连接

	新的API:

        * includes():返回布尔值,表示是否找到了参数字符串
		* startsWith():返回布尔值,表示参数字符串是否在原字符串的头部
		* endsWith() :返回布尔值,表示参数是否在原字符串的尾部

	模板字符串:

			let str = `
				Hello
			  World
			`;
	在控制台显示的是 :
				Hello
			  World

3.解构表达式

3.1.数组解构
	比如:let arr = [1,2,3]
	我想获取其中的值,只能通过角标,ES6可以这样
	const [x,y,z] = arr; //x,y,z将与arr中的每一个位置对应来取值
	//x=1,y=2,z= 3
3.2.对象解构
	比如有一个person对象:

	const person = {
		name : "jack",
		age : 21,
		language : ['java','js','css']
	}

	解构操作,我们可以这么做:
	const {name,age,language} = person
	// name = jack
	// age = 21
	//language = ['java',;'js','css']

4.函数优化-函数的简写方式

//定义一个方法,计数a,b的值,如果b为null则将b赋值为 1
        //传统写法
        function add1(a,b) {
            if (b == null) {
                b = 1;
            }
            return a + b;

        }

        //传统改进写法一
        function add2(a,b) {
            if (!b) {
                b = 1;
            }
            return a + b;
        }

        //传统改进写法二
        function add3(a,b) {
            b = b || 1;
            return a + b;

        }

        //函数的简写方式
        function add4(a,b = 1) {
            return a + b;
        }

5.箭头函数(掌握)

箭头函数:箭头函数不是必须的,但是使用箭头函数可以少写很多代码

代码演示:

/*******一个参数使用箭头函数**********/
		/*******当使用了箭头函数可以少写很多代码**********/
		//正常的定义函数
		function print1(a) {
			 return a + 1;
		 }
	       //匿名函数
	       var print2 = function (a) {
		   return a + 1;
	       }
	       //箭头表达式
	       var print3 = a => {
		   return a +1;
	       }
	       //当只有一行打印时可以省略大括号和return
	       var print4 = a => a + 1;
	       /*******多个参数使用箭头函数**********/
	       //正常的定义函数
	       function print5(a,b) {
		   return a + b;
	       }
	       //匿名函数
	       var print6 = function (a,b) {
		   return a + b;
	       }
	       //箭头表达式
	       //同样的,当打印只有一行的时候可以省略大括号和return
	       var print7 = (a,b) => a+b;

6.对象的函数的属性的简写

//对象函数属性的简化
		let person = {
		    name : "jimmy",
		    eat1 : function (food) {
			console.log(this.name + "正在吃:" + food);
		    },
		    //箭头函数版 (这里拿不到this)
		    eat2 : food => console.log(person.name + "正在吃:" + food),
		    //简写版
		    eat3(food){
			console.log(this.name + "正在吃:" + food)
		    }
		}

7.数组的map方法

map():接收一个函数,将原数组中的所有元素用这个函数处理后放回新数组返回

举列:有一个字符串数组,我们希望转为int数组

let arr = ["1","20","-5"]
		console.log(arr)
		arr = arr.map(s => parseInts(s));
		console.log(arr)

vue

1.MVVM

MVVM:关注模板和视图–相当于后端的MVC,但是前段的MVVM比MVC强大

MVVM模式:

M:即Model,模型,包括数据可一些基本操作(数据层)
V:即View,视图,页面渲染结果(视图层)
VM:即View-Model,模型与视图间的双向操作,无需开发人员干涉(将Model层和View层绑定在一起的层,这一层vue已经自动完成好了)

MVVM模式的好处:

开发人员从后端获取的数据模型,然后通过DOM操作Model渲染到View中,而当用户操作视图,我们还需要通过DOM获取View中的数值,然后同步到View中。而MVVM中的VM要做的事情就是把DOM操作完全封装起来,开发人员不用再关心Model和View之间是如何相互影响的,只要我们Model发生了变化,View上自然就会表现出来,当用户改变了View,Model中的数据也会跟着变化把开发人员从繁琐的DOM操作中解放出来,把关注点放在如何操作Model上

2.vue快速入门

2.1.引入vue.js
2.2.vue的HelloWorld
 <!DOCTYPE html>
    		<html lang="en">
    		<head>
    		    <meta charset="UTF-8">
    		    <title>vue快速入门</title>
    		    <!--引入vue.js-->
    		    <script src="js/vue.js"></script>
    		</head>
    		<body>
    		    <!--
    			使用vue,要求页面必须有一个父容器,所有的内容都得放到这个父容器中
    			这个div要求有id,id的值随意,但是一般叫 app
    			这个div相当于view层
    		     -->
         <div id="app">
    		<h2>{{name}}好帅</h2>
    		<h2>有{{number}}个女孩追求</h2>
    	    </div>
    
    	    <!-- 绑定vue -->
    	    <script>
    		// vue提供一个构造方法,构造方法中放对象
    		var vm = new Vue({
    		    //el 相当于element(元素)
    		    el : "#app",
    		    data : {
    			name : "jimmy",
    			number : "200"
    		    }
    		})
    	    </script>
    	</body>
    	</html>
2.3.双向绑定

双向绑定:

方向一:当改变data属性内容的时候,view中自动更新
方向二:当页面改变XX的时候,data中的xx也会自动更新
注意点:页面的name得可以改变,此时就要选择文本框

代码:

<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>双向绑定</title>
			    <!-- 引入vue -->
			    <script src="js/vue.js"></script>
			</head>
			<body>

			    <div id="app">
				<input type = "text" v-model="context"/>
				<br/>
				{{context}}
			    </div>

			    <script>
				new Vue({
				    el : "#app",
				    data : {
					context : "最遗憾的不是后来,而是假如"
				    }
				})
			    </script>

			</body>
			</html>
2.4.事件处理(点击事件)

代码:

<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>事件处理(点击事件)</title>
			    <script src="js/vue.js"></script>
			</head>
			<body>
			    <div id="app">
				<input type="text" v-model="number"/>
				<br/>
				{{number}}
				<bi/>
				<br/>
				<input type="button" v-on:click="number++" value="+"/>
				<br/>
				<input type="button" v-on:click="number--" value="-"/>
			    </div>
			    <!-- 绑定vue -->
			    <script>
				new Vue({
				    el : "#app",
				    data : {
					number : 2
				    }
				})
			    </script>
			</body>
			</html>

3.vue实列

3.1.创建Vue实列:
	每个Vue应用都是通过Vue函数创建一个新的Vue实例开始的
	比如:
	var vm = new Vue({
				//选项
			})
在构造函数中传入一个对象,并且在对象中声明Vue需要的2数据和方法,包括:

	#  el
	#  data
	#  methods
	#  ...
3.2.模板或元素

一个Vue实例都需要关联一段HTML模板,Vue会基于此模板进行视图渲染我们可以通过el属性来指定

模板:(父类容器)

<div id="app">
  
</div>

然后创建Vue实例,关联这个div

var vm = new Vue({
			el : "#app"
		})

这样,Vue就可以基于id为app的div元素作为模板进行渲染了,在这个div范围外的部分是无法使用vue特性的

3.3.数据

当Vue实例被创建时,它会尝试获取在data中自定义的所有属性,用于视图渲染,并且监视data中的属性变化,当data发生变化,所有相关的视图都将重新渲染,这就是 响应式 系统

HTML Code

<div>
			<input type="text" v-model="name"/>
</div>

JS

var vm = new Vue({
				el : "#app",
				data : {
					name : "刘德华"
				}
			})

name的变化会影响到input的值
input输入的值,也会导致vm中的name发生变化(这个操作总结下来可以叫双向绑定)

3.4.方法

代码:

<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>vue-方法</title>
			    <script src="js/vue.js"></script>
			</head>
			<body>
			    <div id="app">
				<input type="button" value="+" v-on:click="add()"/>
				<br/>
				{{number}}
			    </div>
			    <script>
			       var vm = new Vue({
				    el : "#app",
				    data : {
					number : 20
				    },
				    methods : {
					add(){
					    //这里可以使用this,也可以使用vue对象点属性名
					    this.number++;
					    //vm.number++;
					}
				    }
				})
			    </script>
			</body>
			</html>

4.vue的生命周期(生命周期钩子函数)

4.1.vue生命周期的流程:

1.初始化前:BeforeCreate
2.初始化完成:发生ajax --created
3.双向数据绑定前:BeforeMount
4.双向数据绑定完成:Mounted
5.更新前:BeforeUpdate
6.更新完成:updated
7.销毁前:BeforeDestroy
8.销毁完成:Destroyed

4.2.钩子函数(生命周期钩子函数测试,代码)
<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>生命周期钩子函数的测试</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					{{content}}
				    </div>
				    <script>
				       var vm = new Vue({
					    el : "#app",
					    data : {
						content : "this is content"
					    },
					    methods : {

					    },
					    //创建前
					    beforeCreate(){
						method("创建前",this)
					    },
					    //创建完成
					    created(){
						method("创建完成",this)
					    },
					    //双向数据绑定前
					    beforeMount(){
						method("双向数据绑定前",this)

					    },
					    //双向数据绑定完成
					    mounted(){
						method("双向数据绑定完成",this)
					    },
					    //更新前
					    beforeUpdate(){
						method("更新前",this)
					    },
					    //更新完成
					    updated(){
						method("更新完成",this)
					    },
					    //销毁前
					    beforeDestroy(){
						method("销毁前",this)
					    },
					    //销毁完成
					   destroyed(){
						method("销毁完成",this)
					    }
					})

					function method(process, obj) {
					    console.log("状态:" + process);
					    console.log("数据" + obj.content);
					    console.log("页面中的数据:"+document.getElementById("app").innerHTML)
					    console.log("-----------------------")
					}

				       //更新数据
				       // vm.content = "this is updated content"

				       //销毁数据
				       vm.$destroy();
				    </script>
				</body>
				</html>
4.3.this(vue中的this)

以下代码说明vue中的this

<!DOCTYPE html>
		<html lang="en">
		<head>
		    <meta charset="UTF-8">
		    <title>vue中的this</title>
		    <script src="js/vue.js"></script>
		</head>
		<body>
		    <div id="app">
			{{content}}
		    </div>

		    <script>
			new Vue({
			    el : "#app",
			    data : {
				content : "this is content"
			    },
			    created(){
				this.content = "oh my day"
				console.log(this)
			    }
			})
		    </script>
		</body>
		</html>

结果:

		content最终的结果是创建完成后被重新赋值的content 即值为 oh my day
4.4.指令
4.4.1.什么是指令:

指令(DirectIves)是带 v- 前缀的特殊特性。指令特性的预期值是单个JavaScript表达式。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应地作用于DOM。
比如:v-model,v-on…都是指令

4.4.2.插值表达式:

4.4.2.1.大括号
格式:{{表达式}}
说明:
改表达式支持JS语法,可以调用JS内置函数(必须有返回值)
表达式必须有返回结果,例如 1+1,没有表达式不允许使用,如:var a = 1 + 1
可以直接获取Vue实例中定义的数据或函数

4.4.3.插值闪烁

说明:使用{{}} 方式在网速比较慢是会出现问题,在数据未加载完成时,页面显示会出原始的{{}},加载完毕后才显示正确数据,我们称插值闪烁

4.4.4.插值闪烁的解决方案(v-text和v-html)

使用v-text和v-html指令来代替{{}}
作用:用来进行数据呈现的,可以代替{{}},可以有效地解决插值闪烁问题
说明:
v-text:将数据输入到元素的内部,如果传输的数据有HTML代码,会作为普通文本输出
v-html:将数据输入到元素的内部,如果输入的数据有HTML代码,会被渲染

代码演示v-text 和 v-html

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>演示解决插值闪烁问题的两个指令(v-text 和 v-html)</title>
					    <script src="js/vue.js"></script>
					</head>
					<body>
					    <div id="app">
						<!--使用插值表达式(存在问题:当网速较慢时会出现插值闪烁[显示原有的表达式])-->
						<div>{{content}}</div>
						<!-- v-text 当数据有html代码时不会解析 -->
						<div v-text="content"></div>
						<!-- v-html 当数据有html代码时会解析 -->
						<div v-html="content"></div>
						<br>

					    </div>

					    <script>
						new Vue({
						    el : "#app",
						    data : {
							content : "<h1>this is content</h1>"
						    }
						})
					    </script>
					</body>
					</html>
4.4.5.v-model(双向绑定元素详解)

v-text和v-html可以看做单向绑定,数据影响了视图渲染,但是反过来就不行
v-model是双向绑定,视图(View)和模型(Model)之间会相互影响
双向绑定在视图中可以修改数据,这样也就限定了元素的类型,目前v-model的可使用元素有:
input-text
input-password
select
textarea
checkbox
redio
commponents (Vue中的自定义组件)
基本上除了最后一项,其他都是表单输入项

部分元素类型演示(除了select commponents)

<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>双向绑定元素详解</title>
			    <script src="js/vue.js"></script>
			</head>
			<body>
			    <div id="app">
				<!--文本框-->
				<input type="text" v-model="name"/>{{name}}<br/>
				<!--密码框-->
				<input type="password" v-model="password"/>{{password}}<br/>
				<!--多选框-->
				<input type="checkbox" name="hobby" value="抽烟" v-model="hobby"/>抽烟
				<input type="checkbox" name="hobby" value="喝酒" v-model="hobby"/>喝酒
				<input type="checkbox" name="hobby" value="烫头" v-model="hobby"/>烫头
				<br/>
				{{hobby}}
				<br/>
				<!--单选框-->
				<input type="radio" value="男" name="sex" v-model="sex"/>男
				<input type="radio" value="女" name="sex" v-model="sex"/>女
				<br/>
				{{sex}}
				<br/>
				<!--文本域-->
				<textarea v-model="content"></textarea>
				<br/>
				{{content}}
				<br/>
			    </div>
			    <script>
				new Vue({
				    el : "#app",
				    data : {
					name : "",
					password : "",
					hobby : [],
					sex : "",
					content : ""
				    }
				})
			    </script>
			</body>
			</html>
4.4.6.v-on

v-on指令用于给页面元素绑定事件。语法
v-on:事件名=“js片段函数名”
4.4.6.1.v-on:click (可以简写为@click)

代码演示:

<!DOCTYPE html>
						<html lang="en">
						<head>
						    <meta charset="UTF-8">
						    <title>点击事件的简写方式</title>
						    <script src="js/vue.js"></script>
						</head>
						<body>
						    <div id="app">
							<input type="button" value="v-on:click +" v-on:click="number++"/>
							{{number}}
							<br/>
							<input type="button" value="@click +" @click="number++" />
							{{number}}
						    </div>

						    <script>
							new Vue({
							    el : "#app",
							    data : {
								number : 1
							    }
							})
						    </script>
						</body>
						</html>
4.4.6.2.v-on:keydown (键盘按下事件)

代码演示:

<!DOCTYPE html>
						<html lang="en">
						<head>
						    <meta charset="UTF-8">
						    <title>键盘按下的时候获取改键的ascii码值</title>
						    <script src="js/vue.js"></script>
						</head>
						<body>
						    <div id="app">
							<input type="text" v-on:keydown="show($event)"/>
							<br>
							<input type="text" @keydown="show($event)"/>
						    </div>
						    <script>
							new Vue({
							    el : "#app",
							    data : {

							    },
							    methods: {
								show(event){
								    console.log(event.keyCode)
								}
							    }
							})
						    </script>
						</body>
						</html>
4.4.6.3.v-on:mouseover 和 v-on:mouseout (鼠标移入事件 和 鼠标移出事件)

小案例 (功能:自定义一块区域鼠标移入的时候控制台打印鼠标移入,反之鼠标移出)
代码演示:

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>鼠标移入事件和鼠标移出事件</title>
					    <script src="js/vue.js"></script>
					</head>
					<body>
					    <div id="app">
						<div style="width: 100px;height: 100px;color: red;background-color: green" @mouseover="over()" @mouseout="out()">

						</div>
					    </div>
					    <script>
						new Vue({
						    el : "#app",
						    data : {

						    },
						    methods : {
							over(){
							    console.log("鼠标移入了")
							},
							out(){
							    console.log("鼠标移出了")
							}
						    }
						})
					    </script>
					</body>
					</html>
4.4.7.js冒泡:是一个问题,需要解决

概念:当事件发生后,这个事件就要开始传播(从里到外或者从外到里),会触发所有父层或者子层的方法
解决方案一(老的解决方案):在父层或者子层的事件中传入一个$event [事件源],通过事件源的方法去解决js冒泡问题

小案例:

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>js冒泡问题的解决方案</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<div style="background-color: red;width: 200px;height: 200px" @mouseover="over()" @mouseout="out()">
					    <div style="background-color: green;width: 100px;height: 100px;align-content: center"  @mouseover="xover($event)" @mouseout="xout($event)">

					    </div>
					</div>
				    </div>
				    <script>
					new Vue({
					    el : "#app",
					    data : {

					    },
					    methods : {
						over(){
						    console.log("大的div:鼠标移入了")
						},
						out(){
						    console.log("大的div:鼠标移出了")
						},
						xover(event){
						    console.log("小的div:鼠标移入了")
						    event.stopPropagation()
						},
						xout(event){
						    console.log("小的div:鼠标移出了")
						    event.stopPropagation()
						}
					    }
					})
				    </script>
				</body>
				</html>

解决方案二:事件修饰符–vue中解决冒泡等问题的方案
Vue.js为 v-on 提供事件修饰符来处理DOM事件细节,如:event.preventDefault() 或event.stopPropagation()
Vue.js通过由点(.)表示指令后缀来调用修饰符
.stop //停止触发,防止冒泡修饰符(掌握)
.prevent //阻止事件发生,阻止事件默认行为(掌握)
.capture //捕获
.self //只点自己身上运行
.once //只执行一次

小案例演示:

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>事件修饰符--vue中解决冒泡的方法</title>
					    <script src="js/vue.js"></script>
					</head>
					<body>
					    <div id="app">
						<div style="width: 200px;height: 200px;background-color: red" @mouseover="over()" @mouseout="out()">
						    <!-- .stop 停止触发,防止冒泡 -->
						    <div style="width: 100px;height: 100px;background-color: lime" @mouseover.stop="xover()" @mouseout.stop="xout()">

						    </div>
						</div>
						<!-- 阻止事件默认行为 -->
						<form @submit.prevent action="http:www.baidu.com">
						    <input type="submit" value="提交"/>
						</form>

					    </div>
					    <script>
						new Vue({
						    el : "#app",
						    data : {

						    },
						    methods : {
							over(){
							    console.log("大div:鼠标移入了")
							},
							out(){
							    console.log("大div:鼠标移了")
							},
							xover(){
							    console.log("小div:鼠标移入了")
							},
							xout(){
							    console.log("小div:鼠标移了")
							}

						    }

						})
					    </script>
					</body>
					</html>
4.4.8.按键修饰符

Vue允许为v-on在监听键盘事件时添加按键修饰符
全部的按键别名
.enter //表示键盘的enter建【回车键】
.tab
.delete // 捕获,删除 和 退格 键
.esc
.space
.up
.down
.left
.right
.ctrl
.alt
.shift
.meta

小案例:(需求:当按键是enter键时打印assii值)
代码演示:

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>当按键是enter时打印其ascii值</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<p>第一种方式 keydown.13</p>
					<input type="text" @keydown.13="show($event)"/>
					<p>第二种方式 keydown.enter</p>
					<input type="text" @keydown.enter="show($event)"/>

				    </div>
				    <script>
					new Vue({
					    el : "#app",
					    data : {

					    },
					    methods: {
						show(event){
						    console.log(event.keyCode)
						}
					    }
					})
				    </script>
				</body>
				</html>
4.4.9.练习:

4.4.9.1.只允许文本框中输入0-9数字

	<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>只允许文本框中输入0-9数字</title>
			    <script src="js/vue.js"></script>
			</head>
			<body>
			    <div id="app">
				<p>0-9</p>
				<input type="text" @keydown="show($event)"/>
			    </div>
			    <script>
				new Vue({
				    el : "#app",
				    data : {},
				    methods : {
					show(event){
					    var keyCode_ascii = event.keyCode;
					    if (keyCode_ascii >= 48 && keyCode_ascii <= 57) {
						console.log("允许的数据:" + event.keyCode);
					    } else {
						event.preventDefault()
						console.log("不允许的数据:" + event.keyCode);
					    }
					}
				    }
				})
			    </script>
			</body>
			</html>
4.4.9.2.写一个登录页面,按下enter键的时候。如果下一个是文本框,则光标聚焦,如果下一个是提交则提交表单
<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>练习二</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<p>需求:</p>
					<p>写一个登录页面,按下enter键的时候。如果下一个是文本框,则光标聚焦,如果下一个是提交则提交表单</p>

					<form action="http://www.baidu.com">
					    请输入用户名:<input type="text" @keydown.enter="method(0,$event)" placeholder="请输入用户名"/>
					    <br/>
					    请输入密码:<input type="text" @keydown.enter="method(1,$event)" placeholder="请输入密码"/>
					    <br/>
					    <input type="submit" @keydown.enter="method(2,$event)"  value="提交"/>
					</form>
					<script>
					    new Vue({
						el: "#app",
						data: {},
						methods: {
						    method(index, event) {
							var tagName = document.getElementsByTagName("input");
							if (index == (tagName.length - 2)) {
							    return; //也可以不写
							} else {
							    tagName[index + 1].focus();
							    event.preventDefault();
							}
						    }
						}
					    })
					    // new Vue({
					    //     el : "#app",
					    //     data : {},
					    //     methods: {
					    //         method(index,event){
					    //             var tagName = document.getElementsByTagName("input");
					    //             for (var i = 0; i < tagName.length; i++) {
					    //                 if (tagName[index] == tagName[(tagName.length - 2)]) {
					    //                     return;
					    //                 } else if (tagName[index] == tagName[i]) {
					    //                     tagName[i + 1].focus();
					    //                     event.preventDefault();
					    //                 }
					    //             }
					    //         }
					    //     }
					    // })
					</script>
				    </div>
				</body>
				</html>

4.4.9.3.跑马灯

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>练习三</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<p>需求:</p>
					<P>跑马灯效果</P>

					<input type="button" value="开启跑马灯" @click="open()"/>
					<br/>
					{{content}}
				    </div>
				    <script>
					var vm = new Vue({
					    el : "#app",
					    data : {
						content : "好消息!好消息!"
					    },
					    methods : {
						open(){
						    //方法一
						    setInterval(function () {
							var first = vm.content.substring(0,1);
							var end = vm.content.substring(1);
							vm.content = end + first;
						    },500)
						    //方法二
						    // _this=this   //将this给到_this然后传入函数内   this就是代表当前的vue对象
						    // setInterval(function () {  //定时任务
						    //     //console.log(_this.msg);
						    //     var first=vm.content.substring(0,1);
						    //     var end=_this.content.substring(1);
						    //     _this.content=end+first;
						    // },500);
						}
					    }
					})
				    </script>
				</body>
				</html>
4.4.10.v-for

a.遍历数组
语法:
v-for = “item in items”
items:要遍历的数组
item:迭代得到的数组元素的别名
b.数组角标(索引)
数组遍历及显示角标的小案例(有序列表,和表格展示)

				<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>v-for</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<!--有序列表遍历-->
					<ol>
					    <li v-for="(user,index) in users">
					       {{index}} - {{user.name}} - {{user.age}} - {{user.sex}}
					    </li>
					</ol>

					<!--表格-->
					<table width="150" border="1">
					    <tr>
						<td>角标</td>
						<td>姓名</td>
						<td>年龄</td>
						<td>性别</td>
					    </tr>

					    <tr v-for="(user,index) in users">
						<td>{{index}}</td>
						<td>{{user.name}}</td>
						<td>{{user.age}}</td>
						<td>{{user.sex}}</td>
					    </tr>
					</table>

				    </div>

				    <script>
					new Vue({
					    el : "#app",
					    data : {
						users : [
						    {name : "jack",age : 18, sex: "男"},
						    {name : "lily",age : 18, sex: "女"},
						    {name : "tom",age : 18, sex: "男"},
						    {name : "rose",age : 18, sex: "女"}
						]
					    }
					})
				    </script>
				</body>
				</html>
4.4.11.v-if 和 v-show

共同点:都是条件判断
v-if:移出元素
v-show:只是简单的加display:none
基本使用:
v-if:条件判断,当得到结果为true时,所在的元素才会被渲染
语法:
v-if = “布尔表达式”
v-show:同v-if一样
更多的条件判断:
v-else
v-if-else

v-if v-show小案例演示

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>v-if AND v-show</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<p>案例需求:点击按钮显示数据,隐藏数据</p>

					<input type="button" value="点击" @click="change()"/>
					<!-- 第二种写法  -->
					<input type="button" value="点击" @click="temp =! temp"/>
					<br/>
					<!--v-if-->
					<p v-if="temp">{{content}}</p>
					<!--v-show 控制台查看效果-->
					<p v-show="temp">{{content}}</p>
				    </div>
				    <script>
					new Vue({
					    el : "#app",
					    data : {
						content : "this is content",
						temp : true
					    },
					    methods : {
						change(){
						    this.temp = !this.temp;
						}
					    }
					})
				    </script>
				</body>
				</html>
4.4.12.v-if和v-for结合小案例

需求:表格遍历用户数据,并只显示性别为男的用户数据

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>v-if AND v-for</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<p>需求:</p>
					<p>表格遍历用户数据,并只显示性别为男的用户数据</p>

					<table border="1">
					    <tr>
						<td>角标</td>
						<td>姓名</td>
						<td>年龄</td>
						<td>性别</td>
					    </tr>

					    <tr v-for="(user,index) in users" v-if="user.sex === '男' ">
						<td>{{index}}</td>
						<td>{{user.name}}</td>
						<td>{{user.age}}</td>
						<td>{{user.sex}}</td>
					    </tr>
					</table>
				    </div>
				    <script>
					new Vue({
					    el : "#app",
					    data : {
						users : [
						    {name : "tom",age : 18 ,sex : "男"},
						    {name : "jack",age : 19 ,sex : "男"},
						    {name : "lily",age : 20 ,sex : "女"},
						    {name : "rose",age : 21 ,sex : "女"}
						]
					    }
					})
				    </script>
				</body>
				</html>
4.4.13.v-bind

v-bind绑定的是class样式
注意事项:
假如我们想动态的修改页面元素的属性,比如class属性,这样写是错误的


因为差值表达式不能用在属性值中

v-bind的使用(小案例)

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>v-bind</title>
					    <script src="js/vue.js"></script>
					</head>
					<style>
					    .myStyle{
						color: red;
						size: 4px;
					    }
					</style>
					<body>
					    <div id="app">
						<p>使用v-bind事件给font添加样式</p>
						<!--
						错误写法
						<font class="{{myStyle}}">nice</font>
						-->
						<font v-bind:class="myStyle">nice</font>

					    </div>

					    <script>
						new Vue({
						    el : "#app",
						    data : {
							myStyle : "myStyle"
						    }
						})
					    </script>
					</body>
					</html>
4.4.13.计算属性(未来用的非常多)

计算属性的本质是方法,写的时候是方法,用的时候是属性
计算属性的本质就是方法,但是一定要反回数据

案例(显示当前日期的年月日)

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>计算属性</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<p>案例需求:在页面上显示当前事件 年-月-日</p>
					<!--获取结果-->
					{{method}}
					<!--其他方式-->
					<br/>
					{{time.getFullYear()}} - {{time.getMonth() + 1}} - {{time.getDate()}}
				    </div>

				    <script>
					new Vue({
					    el : "#app",
					    data : {
						time : new Date()
					    },
					    methods : {

					    },
					    //计算属性:;计算出结果再显示
					    computed : {
						method(){
						    //计算属性的本质是方法,但一定要返回数据
						    return this.time.getFullYear() +"-"+ (this.time.getMonth() + 1) +"-"+ this.time.getDate()
						}
					    }
					})
				    </script>
				</body>
				</html>
4.4.14.补充(select双向绑定)

小案例一:select双向绑定

<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>select双向绑定</title>
			    <script src="js/vue.js"></script>
			</head>
			<body>
			    <div id="app">
				<select v-model="yes">
				    <option v-for="item in items" :value="item">{{item}}</option>
				</select>
				{{yes}}
			    </div>
			    <script>
				new Vue({
				    el : "#app",
				    data : {
				       items : ["抽烟","喝酒","烫头"],
				       yes : ""
				    }
				})
			    </script>
			</body>
			</html>

小案例二:select实现div背景色改变

<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>select实现div背景颜色改变</title>
			    <script src="js/vue.js"></script>
			</head>
			    <style>
				.red{
				    background-color: red;
				    width: 100px;
				    height: 100px;
				}
				.yellow{
				    background-color: yellow;
				    width: 100px;
				    height: 100px;
				}
				.lime{
				    background-color: lime;
				    width: 100px;
				    height: 100px;
				}
			    </style>
			<body>
			    <div id="app">
				    <select v-model="thisColor">
					<option v-for="color in colors" :value="color">{{color}}</option>
				    </select>
				    <div :class="thisColor"></div>
			    </div>
			    <script>
				new Vue({
				    el : "#app",
				    data : {
					colors: ["red", "yellow", "lime"],
					thisColor: ""
				    }
				})
			    </script>
			</body>
			</html>

5.Vue.js AJAX

5.1.axios-发送ajax的技术

Axios:是一个基于promise的HTTP库,可以用在浏览器和node.js中

5.2.引入axios

使用 < script src=""> < /script>

5.3.请求方式 (官网拷贝的)
5.3.1.GET
// Make a request for a user with a given ID
				axios.get('/user?ID=12345')
				  .then(function (response) {
				    // handle success
				    console.log(response);
				  })
				  .catch(function (error) {
				    // handle error
				    console.log(error);
				  })
				  .then(function () {
				    // always executed
				  });

				// Optionally the request above could also be done as
				axios.get('/user', {
				    params: {
				      ID: 12345
				    }
				  })
				  .then(function (response) {
				    console.log(response);
				  })
				  .catch(function (error) {
				    console.log(error);
				  })
				  .then(function () {
				    // always executed
				  });  

				// Want to use async/await? Add the `async` keyword to your outer function/method.
				async function getUser() {
				  try {
				    const response = await axios.get('/user?ID=12345');
				    console.log(response);
				  } catch (error) {
				    console.error(error);
				  }
				}
5.3.2.POST
axios.post('/user', {
				    firstName: 'Fred',
				    lastName: 'Flintstone'
				  })
				  .then(function (response) {
				    console.log(response);
				  })
				  .catch(function (error) {
				    console.log(error);
				  });
5.3.3.执行多个并发请求
function getUserAccount() {
				  return axios.get('/user/12345');
				}

				function getUserPermissions() {
				  return axios.get('/user/12345/permissions');
				}

				axios.all([getUserAccount(), getUserPermissions()])
				  .then(axios.spread(function (acct, perms) {
				    // Both requests are now complete
				  }));
5.4.网络文档摘抄 axios API
axios API
				Requests can be made by passing the relevant config to axios.

				axios(config)

				// Send a POST request
				axios({
				  method: 'post',
				  url: '/user/12345',
				  data: {
				    firstName: 'Fred',
				    lastName: 'Flintstone'
				  }
				});
				// GET request for remote image
				axios({
				  method:'get',
				  url:'http://bit.ly/2mTM3nY',
				  responseType:'stream'
				})
				  .then(function (response) {
				    response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
				  });
				axios(url[, config])

				// Send a GET request (default method)
				axios('/user/12345');
5.5.小案例(需求:使用axios对读取user.json文件的内容,并在页面上输出内容)
<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>使用axios对读取user.json文件的内容,并在页面上输出内容</title>
			    <script src="js/vue.js"></script>
			    <script src="js/axios.js"></script>
			</head>
			<body>
			    <div id="app">
				<table border="1">
				    <tr>
					<td>username</td>
					<td>age</td>
					<td>sex</td>
				    </tr>
				    <tr v-for="user in users">
					<td>{{user.username}}</td>
					<td>{{user.age}}</td>
					<td>{{user.sex}}</td>
				    </tr>
				</table>
			    </div>
			    <script>
			       var vm = new Vue({
				    el : "#app",
				    data : {
					users : []
				    },
				    created(){
					//方式一
					// axios.get("/data/users.json")
					//     .then(function (value) {
					//         console.log(value)
					//         console.log(value.data)
					//         vm.users = value.data
					//     })
					//方式二
					axios.get("data/users.json")
					    .then(res => {})
				    }
				})
			    </script>
			</body>
			</html>
5.6.Vue结构的总结
<!DOCTYPE html>
			<html lang="en">
			<head>
			    <meta charset="UTF-8">
			    <title>Vue结构的总结</title>
			    <script src="js/vue.js"></script>
			</head>
			<body>
			    <div id="app">

			    </div>
			    <script>
				new Vue({
				    el : "#app",
				    data : {
					//数组类型
					users : [],
					//对象
					user : {},
					//string类型的变量
					name : "",
					//int类型的变量
					age : 10
				    },
				    methods : {

				    },
				    created(){

				    },
				    //计算属性
				    computed(){

				    }
				})
			    </script>
			</body>
			</html>
5.7.使用axios+Vue+SpringBoot 完成用户管理系统

domian

package com.czxy.domain;

import javax.persistence.Id;
import javax.persistence.Table;

/**
 * @Author Jimmy
 * @Date 2019/9/24 5:00 PM
 * @Desc 用户类
 */
@Table(name = "T_USER")
public class User {
    /**
     * CREATE TABLE T_USER(
     * id INT PRIMARY KEY AUTO_INCREMENT,
     * age INT,
     * username VARCHAR(20),
     * password VARCHAR(50),
     * email VARCHAR(50),
     * sex VARCHAR(20)
     * )
     */
    @Id
    private Integer id;
    private Integer age;
    private String username;
    private String password;
    private String email;
    private String sex;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

dao

package com.czxy.dao;

import com.czxy.domain.User;
import org.apache.ibatis.annotations.*;
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User> {

}

service

package com.czxy.service;

import com.czxy.domain.User;

import java.util.List;

public interface UserService {
    List<User> findAll();

    User findUserById(Integer id);

    Integer updateUserById(User user);

    void deleteUserById(Integer id);
}

impl

package com.czxy.service.impl;

import com.czxy.dao.UserMapper;
import com.czxy.domain.User;
import com.czxy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author Jimmy
 * @Date 2019/9/24 5:09 PM
 * @Desc UserService的实现类
 */

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper mapper;

    @Override
    public List<User> findAll() {
       return mapper.selectAll();
    }

    @Override
    public User findUserById(Integer id) {
        return mapper.selectByPrimaryKey(id);
    }

    @Override
    public Integer updateUserById(User user) {
      return mapper.updateByPrimaryKey(user);
    }

    @Override
    public void deleteUserById(Integer id) {
        mapper.deleteByPrimaryKey(id);
    }
}

controller

package com.czxy.controller;

import com.czxy.domain.User;
import com.czxy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author Jimmy
 * @Date 2019/9/24 5:10 PM
 * @Desc
 */

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;


    //TODO 查询所有的用户信息
    @GetMapping("/findAll")
    public ResponseEntity<List<User>> findAll(){
        System.out.println("findAll is ok");
        try {
            List<User> users = userService.findAll();
            return ResponseEntity.ok(users);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    //TODO 查询用户(根据用户ID回显用户信息)
    @GetMapping("/findUserById/{id}")
    public ResponseEntity<User> findUserById(@PathVariable(name = "id") Integer id){
        try {
            User user = userService.findUserById(id);
            return ResponseEntity.ok(user);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    //TODO 修改提交
    @PutMapping("/updateUserById")
    public ResponseEntity<Void> updateUserById(@RequestBody  User user){
        System.out.println("axios - user :"+user);
        Integer number = userService.updateUserById(user);
        if (number != null) {
            return new ResponseEntity<>(HttpStatus.CREATED);
        } else {
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    //TODO 删除
    @DeleteMapping("/deleteUserById/{id}")
    public ResponseEntity<Void> deleteUserById(@PathVariable(name = "id") Integer id){
        System.out.println("this id :" + id);
        try {
            userService.deleteUserById(id);
            return new ResponseEntity<>(HttpStatus.NO_CONTENT);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

HTML Code

<!DOCTYPE html>
<html>

<head>
    <!-- 页面meta -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <title>数据 - AdminLTE2定制版</title>
    <meta name="description" content="AdminLTE2定制版">
    <meta name="keywords" content="AdminLTE2定制版">
    <meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport">
    <link rel="stylesheet" href="./plugins/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="./plugins/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet" href="./plugins/ionicons/css/ionicons.min.css">
    <link rel="stylesheet" href="./plugins/iCheck/square/blue.css">
    <link rel="stylesheet" href="./plugins/morris/morris.css">
    <link rel="stylesheet" href="./plugins/jvectormap/jquery-jvectormap-1.2.2.css">
    <link rel="stylesheet" href="./plugins/datepicker/datepicker3.css">
    <link rel="stylesheet" href="./plugins/daterangepicker/daterangepicker.css">
    <link rel="stylesheet" href="./plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css">
    <link rel="stylesheet" href="./plugins/datatables/dataTables.bootstrap.css">
    <link rel="stylesheet" href="./plugins/treeTable/jquery.treetable.css">
    <link rel="stylesheet" href="./plugins/treeTable/jquery.treetable.theme.default.css">
    <link rel="stylesheet" href="./plugins/select2/select2.css">
    <link rel="stylesheet" href="./plugins/colorpicker/bootstrap-colorpicker.min.css">
    <link rel="stylesheet" href="./plugins/bootstrap-markdown/css/bootstrap-markdown.min.css">
    <link rel="stylesheet" href="./plugins/adminLTE/css/AdminLTE.css">
    <link rel="stylesheet" href="./plugins/adminLTE/css/skins/_all-skins.min.css">
    <link rel="stylesheet" href="./css/style.css">
    <link rel="stylesheet" href="./plugins/ionslider/ion.rangeSlider.css">
    <link rel="stylesheet" href="./plugins/ionslider/ion.rangeSlider.skinNice.css">
    <link rel="stylesheet" href="./plugins/bootstrap-slider/slider.css">
    <link rel="stylesheet" href="./plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.css">
    <script src="js/vue-2.5.17.js"></script>
    <script src="js/axios-0.18.0.js"></script>
</head>

<body class="hold-transition skin-purple sidebar-mini">
    <div id="app">
    <!-- 页面头部 -->
    <header class="main-header">
        <!-- Logo -->
        <a href="all-admin-index.html" class="logo">
            <!-- mini logo for sidebar mini 50x50 pixels -->
            <span class="logo-mini"><b>数据</b></span>
            <!-- logo for regular state and mobile devices -->
            <span class="logo-lg">用户后台管理</span>
        </a>


        <!-- Header Navbar: style can be found in header.less -->
        <nav class="navbar navbar-static-top">
            <!-- Sidebar toggle button-->
            <a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
                <span class="sr-only">Toggle navigation</span>
            </a>

            <div class="navbar-custom-menu">
                <ul class="nav navbar-nav">
                    <!-- User Account: style can be found in dropdown.less -->
                    <li class="dropdown user user-menu">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                            <img src="./img/user2-160x160.jpg" class="user-image" alt="User Image">
                            <span class="hidden-xs">奇哥</span>
                        </a>
                        <ul class="dropdown-menu">
                            <!-- User image -->
                            <li class="user-header">
                                <img src="./img/user2-160x160.jpg" class="img-circle" alt="User Image">

                                <p>
                                    奇哥 - 数据管理员
                                    <small>最后登录 11:20AM</small>
                                </p>
                            </li>

                            <!-- Menu Footer-->
                            <li class="user-footer">
                                <div class="pull-left">
                                    <a href="#" class="btn btn-default btn-flat">修改密码</a>
                                </div>
                                <div class="pull-right">
                                    <a href="#" class="btn btn-default btn-flat">注销</a>
                                </div>
                            </li>
                        </ul>
                    </li>

                </ul>
            </div>
        </nav>
    </header>
    <!-- 页面头部 /-->

    <!-- 导航侧栏 -->
    <aside class="main-sidebar">
        <!-- sidebar: style can be found in sidebar.less -->
        <section class="sidebar">
            <!-- Sidebar user panel -->
            <div class="user-panel">
                <div class="pull-left image">
                    <img src="./img/user2-160x160.jpg" class="img-circle" alt="User Image">
                </div>
                <div class="pull-left info">
                    <p>奇哥</p>
                    <a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
                </div>
            </div>

            <!-- sidebar menu: : style can be found in sidebar.less -->
            <ul class="sidebar-menu">
                <li class="header">菜单</li>

                <li id="admin-index"><a href="all-admin-index.html"><i class="fa fa-dashboard"></i> <span>首页</span></a>
                </li>

                <!-- 菜单 -->


                <li class="treeview">
                    <a href="#">
                        <i class="fa fa-folder"></i> <span>用户管理</span>
                        <span class="pull-right-container">
                        <i class="fa fa-angle-left pull-right"></i>
                    </span>
                    </a>
                    <ul class="treeview-menu">

                        <li id="admin-login">
                            <a href="#">
                                <i class="fa fa-circle-o"></i> 查询所有用户
                            </a>
                        </li>
                    </ul>
                </li>

                <!-- 菜单 /-->
            </ul>
        </section>
        <!-- /.sidebar -->
    </aside>
    <!-- 导航侧栏 /-->

    <!-- 内容区域 -->
    <!-- @@master = admin-layout.html-->
    <!-- @@block = content -->

    <div class="content-wrapper">

        <!-- 内容头部 -->
        <section class="content-header">
            <h1>
                用户管理
            </h1>
            <ol class="breadcrumb">
                <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
                <li><a href="#">用户管理</a></li>
            </ol>
        </section>
        <!-- 内容头部 /-->

        <!-- 正文区域 -->
        <section class="content">

            <!-- .box-body -->
            <div class="box box-primary">
                <div class="box-header with-border">
                    <h3 class="box-title">列表</h3>
                </div>

                <div class="box-body">

                    <!-- 数据表格 -->
                    <div class="table-box">

                        <!--工具栏-->
                        <div class="pull-left">
                            <div class="form-group form-inline">
                                <div class="btn-group">
                                    <button type="button" class="btn btn-default" title="新建"><i
                                            class="fa fa-file-o"></i> 新建
                                    </button>
                                    <button type="button" class="btn btn-default" title="删除"><i
                                            class="fa fa-trash-o"></i> 删除
                                    </button>
                                    <button type="button" class="btn btn-default" title="开启"><i class="fa fa-check"></i>
                                        开启
                                    </button>
                                    <button type="button" class="btn btn-default" title="屏蔽"><i class="fa fa-ban"></i>
                                        屏蔽
                                    </button>
                                    <button type="button" class="btn btn-default" title="刷新"><i
                                            class="fa fa-refresh"></i> 刷新
                                    </button>
                                </div>
                            </div>
                        </div>
                        <div class="box-tools pull-right">
                            <div class="has-feedback">
                                <input type="text" class="form-control input-sm" placeholder="搜索">
                                <span class="glyphicon glyphicon-search form-control-feedback"></span>
                            </div>
                        </div>
                        <!--工具栏/-->

                        <!--数据列表-->
                        <table id="dataList" class="table table-bordered table-striped table-hover dataTable">
                            <thead>
                            <tr>
                                <th class="" style="padding-right:0px;">
                                    <input id="selall" type="checkbox" class="icheckbox_square-blue">
                                </th>
                                <th class="sorting_asc">ID</th>
                                <th class="sorting_desc">用户名</th>
                                <th class="sorting_asc sorting_asc_disabled">密码</th>
                                <th class="sorting_desc sorting_desc_disabled">性别</th>
                                <th class="sorting">年龄</th>
                                <th class="text-center sorting">邮箱</th>
                                <th class="text-center">操作</th>
                            </tr>
                            </thead>
                            <tbody>

                            <!--<tr>-->
                                <!--<td><input name="ids" type="checkbox"></td>-->
                                <!--<td>1</td>-->
                                <!--<td>张三</td>-->
                                <!--<td>123456</td>-->
                                <!--<td>男</td>-->
                                <!--<td>18</td>-->
                                <!--<td class="text-center">zhangsan@126.com</td>-->
                                <!--<td class="text-center">-->
                                    <!--<button type="button" class="btn bg-olive btn-xs">详情</button>-->
                                    <!--<button type="button" class="btn bg-olive btn-xs" data-toggle="modal" data-target="#myModal"  >编辑</button>-->
                                <!--</td>-->
                            <!--</tr>-->
                            <!--<tr>-->
                                <!--<td><input name="ids" type="checkbox"></td>-->
                                <!--<td>1</td>-->
                                <!--<td>张三</td>-->
                                <!--<td>123456</td>-->
                                <!--<td>男</td>-->
                                <!--<td>18</td>-->
                                <!--<td class="text-center">zhangsan@126.com</td>-->
                                <!--<td class="text-center">-->
                                    <!--<button type="button" class="btn bg-olive btn-xs">详情</button>-->
                                    <!--<button type="button" class="btn bg-olive btn-xs" data-toggle="modal" data-target="#myModal"  >编辑</button>-->
                                <!--</td>-->
                            <!--</tr>-->
                            <!--<tr>-->
                                <!--<td><input name="ids" type="checkbox"></td>-->
                                <!--<td>1</td>-->
                                <!--<td>张三</td>-->
                                <!--<td>123456</td>-->
                                <!--<td>男</td>-->
                                <!--<td>18</td>-->
                                <!--<td class="text-center">zhangsan@126.com</td>-->
                                <!--<td class="text-center">-->
                                    <!--<button type="button" class="btn bg-olive btn-xs">详情</button>-->
                                    <!--<button type="button" class="btn bg-olive btn-xs" data-toggle="modal" data-target="#myModal"  >编辑</button>-->
                                <!--</td>-->
                            <!--</tr>-->

                            <tr v-for="user in users">
                                <td><input name="ids" type="checkbox"></td>
                                <td>{{user.id}}</td>
                                <td>{{user.username}}</td>
                                <td>{{user.password}}</td>
                                <td>{{user.sex}}</td>
                                <td>{{user.age}}</td>
                                <td class="text-center">{{user.email}}</td>
                                <td class="text-center">
                                    <button type="button" class="btn bg-olive btn-xs" @click="deleteUserById(user.id)">删除</button>
                                    <button type="button" class="btn bg-olive btn-xs" data-toggle="modal" data-target="#myModal" @click="findUserById(user.id)">编辑</button>
                                </td>
                            </tr>

                            </tbody>
                            <!--模态窗口-->
                            <div class="tab-pane" id="tab-model">

                                <div id="myModal" class="modal modal-primary" role="dialog">
                                    <div class="modal-dialog modal-lg">
                                        <div class="modal-content">
                                            <div class="modal-header">
                                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                                    <span aria-hidden="true">&times;</span></button>
                                                <h4 class="modal-title">用户信息</h4>
                                            </div>
                                            <div class="modal-body">

                                                <div class="box-body">
                                                    <div class="form-horizontal">


                                                        <div class="form-group">
                                                            <label class="col-sm-2 control-label">用户名:</label>
                                                            <div class="col-sm-5">
                                                                <input type="text" :value="user.username" v-model="user.username" class="form-control">
                                                            </div>
                                                        </div>
                                                        <div class="form-group">
                                                            <label class="col-sm-2 control-label">密码:</label>
                                                            <div class="col-sm-5">
                                                                <input type="text" :value="user.password" v-model="user.password" class="form-control">
                                                            </div>
                                                        </div>
                                                        <div class="form-group">
                                                            <label class="col-sm-2 control-label">性别:</label>
                                                            <div class="col-sm-5">
                                                                <input type="text" :value="user.sex" v-model="user.sex" class="form-control">
                                                            </div>
                                                        </div>
                                                        <div class="form-group">
                                                            <label class="col-sm-2 control-label">年龄:</label>
                                                            <div class="col-sm-5">
                                                                <input type="text" :value="user.age" v-model="user.age" class="form-control">
                                                            </div>
                                                        </div>
                                                        <div class="form-group">
                                                            <label class="col-sm-2 control-label">邮箱:</label>
                                                            <div class="col-sm-5">
                                                                <input type="text" :value="user.email" v-model="user.email" class="form-control">
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>

                                            </div>
                                            <div class="modal-footer">
                                                <button type="button" class="btn btn-outline" data-dismiss="modal">关闭</button>
                                                <button type="button" class="btn btn-outline" data-dismiss="modal" @click="update()">修改</button>
                                            </div>
                                        </div>
                                        <!-- /.modal-content -->
                                    </div>

                                    <!-- /.modal-dialog -->
                                </div>
                                <!-- /.modal -->
                            </div>
                            <!--模态窗口/-->
                        </table>
                        <!--数据列表/-->


                    </div>
                    <!-- 数据表格 /-->


                </div>
                <!-- /.box-body -->

                <!-- .box-footer-->
                <div class="box-footer">
                    <div class="pull-left">
                        <div class="form-group form-inline">
                            总共2 页,共14 条数据。 每页
                            <select class="form-control">
                                <option>1</option>
                                <option>2</option>
                                <option>3</option>
                                <option>4</option>
                                <option>5</option>
                            </select> 条
                        </div>
                    </div>

                    <div class="box-tools pull-right">
                        <ul class="pagination">
                            <li>
                                <a href="#" aria-label="Previous">首页</a>
                            </li>
                            <li><a href="#">上一页</a></li>
                            <li><a href="#">1</a></li>
                            <li><a href="#">2</a></li>
                            <li><a href="#">3</a></li>
                            <li><a href="#">4</a></li>
                            <li><a href="#">5</a></li>
                            <li><a href="#">下一页</a></li>
                            <li>
                                <a href="#" aria-label="Next">尾页</a>
                            </li>
                        </ul>
                    </div>

                </div>
                <!-- /.box-footer-->


            </div>

        </section>
        <!-- 正文区域 /-->

    </div>
    <!-- @@close -->
    <!-- 内容区域 /-->

    <!-- 底部导航 -->
    <footer class="main-footer">
        <div class="pull-right hidden-xs">
            <b>Version</b> 1.0.8
        </div>
        <strong>Copyright &copy; 2014-2017 <a href="http://www.czxy.com">传智学院研发部</a>.</strong> All rights reserved.
    </footer>
    <!-- 底部导航 /-->
    </div>

    <script>
       var vm = new Vue({
            el : "#app",
            data : {
                users : [],
                user : {}
            },
            methods : {
                findAll(){
                    axios.get("/user/findAll")
                        .then(function (value) {
                            vm.users = value.data;
                        })
                },
                findUserById(id){
                   axios.get("/user/findUserById/"+id)
                       .then(function (value) {
                           console.log(value.data)
                           vm.user = value.data;
                       })
                },
                update(){
                    console.log(vm.user)

                    axios.put("/user/updateUserById",vm.user)
                        .then(function () {
                            vm.findAll()
                        })
                },
                deleteUserById(id){
                    console.log(id)
                    axios.delete("/user/deleteUserById/"+id)
                        .then(function () {
                            vm.findAll()
                        })
                }
            },
            created(){
                axios.get("/user/findAll")
                    .then(function (value) {
                       vm.users = value.data;
                    })
            }
        })
    </script>
<script src="./plugins/jQuery/jquery-2.2.3.min.js"></script>
<script src="./plugins/jQueryUI/jquery-ui.min.js"></script>
<script>
    $.widget.bridge('uibutton', $.ui.button);
</script>
<script src="./plugins/bootstrap/js/bootstrap.min.js"></script>
<script src="./plugins/raphael/raphael-min.js"></script>
<script src="./plugins/morris/morris.min.js"></script>
<script src="./plugins/sparkline/jquery.sparkline.min.js"></script>
<script src="./plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
<script src="./plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
<script src="./plugins/knob/jquery.knob.js"></script>
<script src="./plugins/daterangepicker/moment.min.js"></script>
<script src="./plugins/daterangepicker/daterangepicker.js"></script>
<script src="./plugins/daterangepicker/daterangepicker.zh-CN.js"></script>
<script src="./plugins/datepicker/bootstrap-datepicker.js"></script>
<script src="./plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script>
<script src="./plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"></script>
<script src="./plugins/slimScroll/jquery.slimscroll.min.js"></script>
<script src="./plugins/fastclick/fastclick.js"></script>
<script src="./plugins/iCheck/icheck.min.js"></script>
<script src="./plugins/adminLTE/js/app.min.js"></script>
<script src="./plugins/treeTable/jquery.treetable.js"></script>
<script src="./plugins/select2/select2.full.min.js"></script>
<script src="./plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
<script src="./plugins/bootstrap-wysihtml5/bootstrap-wysihtml5.zh-CN.js"></script>
<script src="./plugins/bootstrap-markdown/js/bootstrap-markdown.js"></script>
<script src="./plugins/bootstrap-markdown/locale/bootstrap-markdown.zh.js"></script>
<script src="./plugins/bootstrap-markdown/js/markdown.js"></script>
<script src="./plugins/bootstrap-markdown/js/to-markdown.js"></script>
<script src="./plugins/ckeditor/ckeditor.js"></script>
<script src="./plugins/input-mask/jquery.inputmask.js"></script>
<script src="./plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
<script src="./plugins/input-mask/jquery.inputmask.extensions.js"></script>
<script src="./plugins/datatables/jquery.dataTables.min.js"></script>
<script src="./plugins/datatables/dataTables.bootstrap.min.js"></script>
<script src="./plugins/chartjs/Chart.min.js"></script>
<script src="./plugins/flot/jquery.flot.min.js"></script>
<script src="./plugins/flot/jquery.flot.resize.min.js"></script>
<script src="./plugins/flot/jquery.flot.pie.min.js"></script>
<script src="./plugins/flot/jquery.flot.categories.min.js"></script>
<script src="./plugins/ionslider/ion.rangeSlider.min.js"></script>
<script src="./plugins/bootstrap-slider/bootstrap-slider.js"></script>
<script src="./plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.js"></script>
<script src="./plugins/bootstrap-datetimepicker/locales/bootstrap-datetimepicker.zh-CN.js"></script>
</body>
</html>

6.组件化

组件:
在大型应用开发的时候,页面可以划分成很多部分,往往不同的页面,也会有不同的部分,例如可能会有相同的头部导航,尾部信息模块
但是如果每一页面都独自开发,这无疑增加了我们的开发成本,所以我们会吧页面的不同不封拆分成独立的组件,然后在不同的页面就可以共享这些组件,避免重复开发

6.1.定义全局组件

我们可以使用Vue.component来定义一个组件
Vue.component(组件名称,Vue对象) 注意组件名称只能小写
在Vue对象中我们需要使用template来定义组件的HTML部分

例子:

Vue.component(‘hello’,{
					template : '<p>hello world !</p>'
				})

小案例:

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>vue-全局组件一</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<hello></hello>
				    </div>
				    <script>
					//在这里定义全局组件
					//这里有两个值
					//第一个值:组件的名称
					//第二个值:组件的内容
					Vue.component("hello",{
					    //将html代码写在这里
					    //每个组件必须有且只有一个根标签
					    template : "<p>这是一个段落</p>" //使用模版字符串定义
					})
					new Vue({
					    el : "#app"
					})
				    </script>
				</body>
				</html>

加强一:

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>vue-全局组件二</title>
					    <script src="js/vue.js"></script>
					</head>
					<body>
					    <div id="app">
						<p>在案例一的基础上进行加强</p>
						<hello></hello>
					    </div>
					    <script>
						//在这里定义全局组件
						//这里有两个值
						//第一个值:组件的名称
						//第二个值:组件的内容
						Vue.component("hello",{
						    //将html代码写在这里
						    //每个组件必须有且只有一个根标签
						    template : "<button @click='number++'>+{{number}}</button>", //使用模版字符串定义
						    data(){
							return {
							    number : 0
							}
						    }
						})
						new Vue({
						    el : "#app"
						})
					    </script>
					</body>
					</html>

加强二:

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>vue-全局组件三</title>
					    <script src="js/vue.js"></script>
					</head>
					<body>
					    <div id="app">
						<p>在案例一的基础上进行加强</p>
						<hello></hello>
					    </div>
					    <script>
						//在这里定义全局组件
						//这里有两个值
						//第一个值:组件的名称
						//第二个值:组件的内容
						Vue.component("hello",{
						    //将html代码写在这里
						    //每个组件必须有且只有一个根标签
						    // template : "<button @click='number++'>+{{number}}</button>", //使用模版字符串定义
						    template : "<button @click='add()'>+{{number}}</button>", //使用模版字符串定义
						    data(){
							return {
							    number : 0
							}
						    },
						    methods : {
							add(){
							    this.number++;
							}
						    }
						})
						new Vue({
						    el : "#app"
						})
					    </script>
					</body>
					</html>
6.2.组件的复用

一个页面可以定义多个组件,每个组件互不干扰
案例演示:

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>组件的复用</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<hello1></hello1>
					<hello2></hello2>
					<hello2></hello2>
				    </div>

				    <script>
					//一个页面可以定义多个组件
					//定义全局组件
					Vue.component("hello1",{
					    template : "<button>点</button>"
					})
					Vue.component("hello2",{
					    template : "<input value='123'/>"
					})
					new Vue({
					    el : "#app"
					})
				    </script>
				</body>
				</html>
6.3.局部组件

局部组件的定义方式:

//定义局部组件
				const hello = {
				    template : "<button @click='add()'></button>",
				    data(){
					return {
					    number : 0
					} 
				    },
				    methods : {
					add(){
					    this.number++
					}
				    }
				}

局部组件需要注册:

new Vue({
				    //局部组件需要注册
				    el : "#app",
				    components : {
					//前面是注册标签的名字后面才是真正的组件,当两个名字一样时可以简写
					// hello : hello
					//简写
					hello
				    }
				})

完整的例子:

<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>局部组件</title>
				    <script src="js/vue.js"></script>
				</head>
				<body>
				    <div id="app">
					<hello></hello>
				    </div>

				    <script>
					//定义局部组件
					const hello = {
					    template : "<button @click='add()'>+{{number}}</button>",
					    data(){
						return {
						    number : 0
						}
					    },
					    methods : {
						add(){
						    this.number++
						}
					    }
					}
					new Vue({
					    //局部组件需要注册
					    el : "#app",
					    components : {
						//前面是注册标签的名字后面才是真正的组件,当两个名字一样时可以简写
						// hello : hello
						//简写
						hello
					    }
					})
				    </script>
				</body>
				</html>
6.4.组件通信
6.4.1.父子传值(父的值是不变的)

代码演示:

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>子向父传值</title>
					    <script src="js/vue.js"></script>
					</head>
					<body>
					    <div id="app">
						{{number}}
						<br/>
						<hello :num="number" @incr="thisFAdd" @redues="fredues"></hello>
					    </div>

					    <script>
						Vue.component("hello",{
						    template : "<div><button @click='add()'>+ {{num}}</button><button @click='redu()'>- {{num}}</button></div>",
						    props : ["num"],
						    methods : {
							add(){
							    //在此通过vue提供的对象 $.emit 回调父组件的方法
							    this.$emit("incr")
							},
							redu(){
							    this.$emit("redues")
							}
						    }
						})
						new Vue({
						    el : "#app",
						    data :{
							number : 0
						    },
						    methods:{
							thisFAdd(){
							    this.number++
							},
							fredues(){
							    this.number--
							}
						    }
						})
					    </script>

					</body>
					</html>
6.4.3.传参

案例演示:

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>父子传值 -- 传参</title>
					    <script src="js/vue.js"></script>
					</head>
					<body>
					    <div id="app">
						{{number}}
						<hello @outchuan="gefu"></hello>
					    </div>

					    <script>

						Vue.component("hello",{
						    template : "<button @click='chuan(10)'>传</button>",
						    methods : {
							chuan(no){
							    this.$emit("outchuan",no)
							}
						    }
						})

						new Vue({
						    el : "#app",
						    data : {
							number : 0
						    },
						    methods:{
							gefu(no){
							    this.number = no
							}
						    }
						})
					    </script>
					</body>
					</html>
6.4.4.子向父传值 – 超链接方式

案例演示:

<!DOCTYPE html>
					<html lang="en">
					<head>
					    <meta charset="UTF-8">
					    <title>子向父传值 -- 超链接方式</title>
					    <script src="js/vue.js"></script>
					</head>
					<body>
					    <div id="app">
						{{number}}
						<br/>
						<hello @outchuan="gefu"></hello>
					    </div>
					    <script>

						Vue.component("hello",{
						    template : "<div><a href='#' @click.prevent='chuan(1024)'>子向父传值 -- 超链接方式</a></div>",
						    methods : {
							chuan(no){
							    this.$emit("outchuan",no)
							}
						    }
						})

						new Vue({
						    el : "#app",
						    data : {
							number : 0
						    },
						    methods:{
							gefu(no){
							    this.number = no

							}
						    }
						})
					    </script>
					</body>
					</html>

7.vue的重点总结:

7.1.MvVM:

前端的设计模式。它与MVC的区别是:MVVM它实现了双向数据绑定,MVC没有实现双向数据绑定

7.2.双向数据绑定:

当model数据发生变化之后,页面View层自动改变;当页面数据发生改变时,Model层数据也会自动改变

7.3.生命周期钩子函数(8个钩子函数):

(只需要记住created)created:new Vue() 执行完成,在双向数据绑定之前,通常用来获取数据,紧跟着就可以进行双向数据绑定

7.4.指令:

			7.4.1.插值表达式{{}}
			7.4.2.v-text,v-html
			7.4.3.v-model:绑定表单元素的input,radio,CheckBox,textare,select
			7.4.4.v-on:事件 简写@ 有 @click @mouseover @mouseout @keydown @keyup...
			7.4.5.js的冒泡事件:阻止冒泡的发生 stop
			7.4.6.阻止js的默认事件: 事件.prevent
			7.4.7.v-if
			7.4.8.v-for
			7.4.9.v-bind:绑定的是属性,简写 :
			7.4.10.计算属性:本质是方法,但我们可以以属性的方式调用
			7.4.11.axios:发生ajax
			7.4.12.组件:父子传值

8.goods-management案例 (SpringBoot +RestFlu + vue + elementUI 完成分页)

com.jimmy
controller

package com.jimmy.controller;

import com.jimmy.domian.BaseResult;
import com.jimmy.domian.Goods;
import com.jimmy.service.GoodsService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author Jimmy
 * @Date 2019/10/1 8:15 AM
 * @Desc GoodsController
 */

@RestController
public class GoodsController {
    @Resource
    private GoodsService goodsService;

    //TODO 查询所有
    @GetMapping("all")
    public ResponseEntity<List<Goods>> all() {
        try {
            List<Goods> goods = goodsService.all();
            return ResponseEntity.ok(goods);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    //TODO 分页查询
    @GetMapping("/pageShowList")
    public ResponseEntity<BaseResult> pageShowList(Integer page,Integer rows) {
        BaseResult br = goodsService.pageShowList(page,rows);
        return new ResponseEntity<>(br,HttpStatus.OK);
    }

}

domain

package com.jimmy.domian;

/**
 * @Author Jimmy
 * @Date 2019/10/1 11:07 AM
 * @Desc
 */

public class BaseResult {
    //总条数
    private Integer total;
    //object
    private Object data;

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}


package com.jimmy.domian;

import javax.persistence.Id;
import javax.persistence.Table;

/**
 * @Author Jimmy
 * @Date 2019/10/1 8:11 AM
 * @Desc 商品类
 */

@Table(name = "goods")
public class Goods {
    /*
      id int primary key AUTO_INCREMENT,
      name varchar(255),
      image varchar(255),
      price double
     */

    @Id
    private Integer id;
    private String name;
    private String image;
    private Double price;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", image='" + image + '\'' +
                ", price=" + price +
                '}';
    }
}

dao

package com.jimmy.dao;

import com.jimmy.domian.Goods;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface GoodsMapper extends tk.mybatis.mapper.common.Mapper<Goods> {

}


service

package com.jimmy.service;

import com.jimmy.domian.BaseResult;
import com.jimmy.domian.Goods;

import java.util.List;

public interface GoodsService {
    List<Goods> all();

    BaseResult pageShowList(Integer page, Integer rows);
}

	impl

package com.jimmy.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.jimmy.dao.GoodsMapper;
import com.jimmy.domian.BaseResult;
import com.jimmy.domian.Goods;
import com.jimmy.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author Jimmy
 * @Date 2019/10/1 8:14 AM
 * @Desc GoodsService接口的实现类
 */

@Service
@Transactional
public class GoodsServiceImpl implements GoodsService {
    @Resource
    private GoodsMapper mapper;
    @Override
    public List<Goods> all() {
        return mapper.selectAll();
    }

    @Override
    public BaseResult pageShowList(Integer page, Integer rows) {
        PageHelper.startPage(page,rows);
        List<Goods> goods = mapper.selectAll();
        PageInfo<Goods> pageInfo = new PageInfo<>(goods);
        BaseResult br = new BaseResult();
        br.setTotal((int) pageInfo.getTotal());
        br.setData(pageInfo.getList());
        return br;
    }
}

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>goods</title>
    <script src="js/vue.js"></script>
    <script src="js/axios.js"></script>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入组件库 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
    <div id="app">
        <table border="1" width="300" cellspacing="0" cellpadding="1">
               <thead>
                    <tr>
                        <td>ID</td>
                        <td>商品名称</td>
                        <td>商品描述</td>
                        <td>商品价格</td>
                    </tr>
               </thead>
               <tbody>
                    <tr v-for="good in goods">
                        <td>{{good.id}}</td>
                        <td>{{good.name}}</td>
                        <td><img :src="good.image" height="50" width="50"></td>
                        <td>{{good.price}}</td>
                    </tr>
               </tbody>
        </table>

        <el-pagination
                background
                @size-change="handleSizeChange"
                @current-change="handleCurrentChange"
                :current-page="currentPage"
                :page-sizes="[1, 2, 3, 4]"
                :page-size="pageSize"
                layout="total, sizes, prev, pager, next, jumper"
                :total="total">
        </el-pagination>

    </div>

    <script>
       var vm = new Vue({
            el : "#app",
            data : {
                //当前页数
                currentPage : 1,
                //每页显示1个
                pageSize : 1,
                //一共200页
                total : 200,
                goods :[]
            },
            methods : {
                pageShowList(){
                    axios.get("/pageShowList?page="+this.currentPage+"&rows="+this.pageSize)
                        .then(function (value) {
                            console.log(value)
                            vm.goods = value.data.data
                        })
                }
                ,
                handleSizeChange(val){
                    vm.pageSize = val
                    vm.pageShowList()
                },
                handleCurrentChange(val){
                    vm.currentPage = val
                    vm.pageShowList()
                }
            },
            created(){
                //展示所有
                // axios.get("/all")
                //     .then(function (value) {
                //         vm.goods = value.data
                //     })

                //分页展示
                //ajax GET请求参数
                // 1.当前页显示条数
                // 2.当前页码
                this.pageShowList()
            }
        })
    </script>

</body>
</html>

9.elementUI分页组件的使用

9.1.引入:
 <!-- 引入样式 -->
				  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
				  <!-- 引入组件库 -->
				  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
9.2.分页效果代码演示:
<!DOCTYPE html>
				<html lang="en">
				<head>
				    <meta charset="UTF-8">
				    <title>elementUI分页</title>
				    <script src="js/vue.js"></script>
				    <!-- 引入样式 -->
				    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
				    <!-- 引入组件库 -->
				    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
				</head>
				<body>
				    <div id="app">
					<el-pagination
						background
						@size-change="handleSizeChange"
						@current-change="handleCurrentChange"
						:current-page="currentPage"
						:page-sizes="[10, 20, 30, 40]"
						:page-size="pageSize"
						layout="total, sizes, prev, pager, next, jumper"
						:total="total">
					</el-pagination>
				    </div>
				    <script>
					new Vue({
					    el : "#app",
					    data : {
						//当前页码
						currentPage : 1,
						//一页显示多少个
						pageSize : 10,
						//总页数
						total : 200
					    },
					    methods : {
						//改变每页的显示条数,参数就是新选择的参数
						handleSizeChange(val){
						    console.log("当前页的条数为:" + val + "条");
						},
						//当前页码
						handleCurrentChange(val){
						    console.log("当前页码为:" + val);
						}
					    }
					})
				    </script>
				</body>
				</html>
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值