ToB企服应用市场:ToB评测及商务社交产业平台
标题:
前端技术栈三(vue+Axios)
[打印本页]
作者:
徐锦洪
时间:
2024-7-10 19:55
标题:
前端技术栈三(vue+Axios)
一、Vue
1
基本介绍
1.1 Vue
是什么
?
Vue (
读音
/vjuː/
,类似于
view)
是一个前端框架
,
易于构建用户界面
Vue
的核心库只关注视图层,不光易于上手,还便于与第三方库或项目整合
支持和别的类库联合使用
开辟复杂的单页应用非常方便
Vue
是
Vue.js
的简称
官网
: https://cn.vuejs.org/
git
地址
: https://github.com/vuejs
1.2
MVVM
MVVM
头脑
M
∶即
Model
,模型,包括数据和一些基本操纵
V
∶即
View
,视图,页面渲染结果
VM
∶即
View-Model
,模型与视图间的双向操纵
(
无需开辟人员干涉
)
在
MVVM
之前,开辟人员从后端获取需要的数据模型,然后要通过
DOM
操纵
Model
渲染到
View
中。而后当用户操纵视图,我们还需要通过
DOM
获取
View
中的数据
然后同步到
Model
中。
而
MVVM
中的
VM
要做的事情就是
把
DOM
操纵完全封装起来
,开辟人员不用再关心
Model
和
View
之间是怎样互相影响的
只要我们
Model
发生了改变,
View
上自然就会体现出来
当用户修改了
View
,
Model
中的数据也会跟着改变。。
结果
:把开辟人员从繁琐的
DOM
操纵中解放出来,把关注点放在怎样操纵
Model
上
,
大
大提高开辟服从
2
快速入门
2.1 基本使用
官网文档:
https://cn.vuejs.org/v2/guide/index.html
下载
: https://cn.vuejs.org/v2/guide/installation.html
为了让
IDEA
辨认
Vue
代码,需要安装插件
Vue.js
关于办理idea应用市场加载不出来得,可自行百度
2.2 案例
2.2.1 需求
2.2.2 步骤
创建新文件夹
D:\idea_java_projects\vue ,
直接拖到
Idea
工具,使用
idea
打开
将下载好的
vue.js
拷贝到
D:\idea_java_projects\vue\vue.js
创建
D:\idea_java_projects\vue\vue_quick_start.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue快速入门</title>
</head>
<body>
<div id="app">
<!--
1.{{message}}:插值表达式
2. message就是从model的data数据池获取
3.当我们的代码执行时,会到data{}数据池进行匹配数据,如果匹配上就会替换吗,反之就是输出空
-->
<h1>欢迎你{{message}}--{{name}}</h1>
</div>
<!--引入vue.js-->
<script src="vue.js"></script>
<script>
//创建vue对象
/*
1.创建Vue对象实例
2.我们在控制台输出vm对象,看看对象的结构
*/
let vm = new Vue({
el:"#app",//创建的vue实例挂载到 id=app的div
data:{//表示数据池,以k-v形式保存,根据自己的需求设置
message:"Hello-Vue",
name:"韩顺平教育"
}
})
console.log("vm=>",vm);
console.log("message",vm._data.message);
console.log("name=",vm._data.name);
console.log("message",vm.message);//等价的,他放了一份在data中,也放了一份在vm的根下
console.log("name=",vm.name);
</script>
</body>
</html>
复制代码
2.2.3
留意事项和使用细节
留意代码次序,要求
div
在前,
script
在后,否则无法绑定命据
【从上到下执行,也就是div得在前】
从案例可以体会声明式渲染:
Vue.js
采用简洁的模板语法来声明式地将数据渲染进
DOM
的系统, 做到数据和显示分离
Vue
没有繁琐的
DOM
操纵,假如使用
jQuery
,我们需要先找到
div
节点,获取到
DOM
对象,然后举行节点操纵
,
显然
Vue
更加简洁
3
数据单向渲染
3.1
基本阐明
3.2
需求分析
/
图解
演示
v-bind
的使用
,
可以绑定元素的属性
(
如图
把准备好的
1.jpg
拷贝到
D:\idea_java_projects\vue\1.jpg
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>单向数据渲染</title>
</head>
<body>
<div id="app">
<h1>{{message}}</h1>
<!--
1. 使用插值表达式引用 data 数据池数据是在标签体内
2. 如果是在标签/元素 的属性上去引用 data 数据池数据时,不能使用插值表达式
3. 需要使用 v-bind, 因为 v-bind 是 vue 来解析, 默认报红,但是不影响解析
4. 如果不希望看到报红, 直接 alt+enter 引入 xmlns:v-bind
-->
<!--<img src="{{img_src}}">-->
<img v-bind:src="img_src" v-bind:width="img_width">
<img :src="img_src" :width="img_width">
</div>
<script src="vue.js"></script>
<script>
let vm=new Vue({
el:"#app",
data:{
message:"hello 耗子精",
img_src:"1.jpg",
img_width:"200px"
}
})
</script>
</body>
</html>
复制代码
3.3
留意事项和使用细节
插值表达式是用在标签体的
假如给标签属性绑定值,则使用
v-bind
指令
4
数据双向绑定
4.1
需求分析
需求在输入框中输入信息,会更新到相应绑定的位置
4.2
代码实现
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>双向数据渲染</title>
</head>
<body>
<div id="app">
<h1>
{{message}}
</h1>
<!--老韩解读
1. v-bind 是数据单向渲染: data 数据池绑定的数据变化,会影响 view
2. v-model="hobby.val" 是数据的双向渲染, (1)data 数据池绑定的数据变化,会影响 view 【底层的机制是 Data Bindings】
(2)view 关联的的元素值变化, 会影响到 data 数据池的数据【底层机制是 Dom
Listeners】
-->
<input type="text" v-model:value="hobby.val"><br/><br/>
<input type="text" v-bind:value="hobby.val"><br/><br/>
<p>你输入的爱好是:{{hobby.val}}~</p>
</div>
<script src="vue.js"></script>
<script>
let vm=new Vue({
el:"#app",
data:{
message:"hi,输入你的爱好",
hobby:{
val:"购物"
}
}
})
</script>
</body>
</html>
复制代码
5
事件绑定
5.1
基本阐明
使用
v-on
举行事件处理,好比
: v-on:click
表示处理鼠标点击事件
事件调用的方法定义在
vue
对象声明的
methods
节点中
v-on:
事件名 可以绑定指定事件
官方文档:
https://cn.vuejs.org/v2/guide/events.html
5.2 需求
演示
Vue
事件绑定操纵
5.3 代码
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>事件处理</title>
</head>
<body>
<div id="app">
<h1>{{message}}</h1>
<!--老韩解读
1. v-on:click 表示我们要给 button 元素绑定一个 click 的事件
2. sayHi() 表示绑定的方法, 在方法池 methods{} 定义的
3. 底层仍然是 dom 处理
4. 如果方法不需要传递参数,可以省略()
5. v-on:click 可以简写@, 但是需要浏览器支持
-->
<button v-on:click="sayHi()">点击输出</button>
<button v-on:click="sayOk()">点击输出</button>
<button v-on:click="sayHi">点击输出</button>
<button @click="sayOk">点击输出</button>
</div>
<script src="vue.js"></script>
<script>
let vm=new Vue({
el:"#app",
data:{
message: "Vue 事件处理的案例",
name: "韩顺平教育"
},
// 1. 是一个 methods 属性, 对应的值是对象{}
// 2. 在{} 中, 可以写很多的方法, 你可以这里理解是一个方法池
// 3. 这里需要小伙伴有 js 的基础=>java web 第 4 章
methods:{
sayHi(){
console.log("hi, 银角大王~");
},
sayOk(){
console.log("ok, 金角大王~");
}
}
})
console.log(vm)
</script>
</body>
</html>
复制代码
6
修饰符
6.1
基本阐明
修饰符
(Modifiers)
是以
(.)
指明的后缀,指出某个指令以特殊方式绑定。
例如,
.prevent
修饰符告诉
v-on
指令对于触发的事件调用
event.preventDefault()
即阻
止事件本来的默认行为
事件修饰符 【
.stop
阻止事件继续流传
.prevent
阻止标签默认行为
.capture
使用事件捕获模式
,
即元素自身触发的事件先在此到处理,然后才交由内部元素进
行处理
.self
只当在
event.target
是当前元素自身时触发处理函数
.once
事件将只会触发一次 .passive告诉浏览器你不想阻止事件的默认行为】
键盘事件的修饰符 【
好比
:
项目常常需要监听一些键盘事件来触发步调的执行,而
Vue
中允许在监听的时间添
加关键修饰符
<input v-on:keyup.13="submit">
v-model
的修饰符 【
好比
:
主动过滤用户输入的首尾空格
<input v-model.trim="msg">】
6.2
需求分析
/
图解
需求
:
演示
v-on:submit.prevent
的使用
,
假如没有输入名字,控制台输出
"
请输入名
字
"
,否则输出
"
提交表单
"
解惑
,
为什么在开辟中
,
偶尔需要
,
让某个指令以特殊方式绑定
,
好比表单提交
1)
我们不希望将这个表单举行团体提交
,
而是是
Ajax
的方式举行提交
2)
因为表单团体提交会导致重载页面
,
而
Ajax
方式可以有选择性提交数据,而且局部刷
新
6.3 代码
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Vue 修饰符使用</title>
</head>
<body>
<div id="app">
<!-- 解读
1. 修饰符用于指出一个指令应该以特殊方式绑定。
2. v-on:submit.prevent 的.prevent 修饰符表示阻止表单提交的默认行为
3. 执行 程序员指定的方法
-->
<form action="https://www.baidu.com" v-on:submit.prevent="onMysubmit">
妖怪名:<input type="text" v-model:value="monster.name"><br/><br/>
<button type="submit">注册</button>
</form>
</div>
<script src="vue.js"></script>
<script>
let vm=new Vue({
el: '#app',
data:{
//数据池
monster:{//monster 数据(对象)的属性, 可以动态生成
}
},
methods:{
onMysubmit(){
//console.log("我们自己的表单提交处理...");
//"", null, undefined 都是 false
if(this.monster.name){
console.log("提交表单 name=",this.monster.name);
//这里,程序员就可以根据自己的业务发出 ajax 请求到后端
//得到数据后,在进行数据更新
}else {
console.log("请输入名字")
}
}
}
})
</script>
</body>
</html>
复制代码
7
条件渲染
/
控制
: v-if v-show
7.1 基本阐明
Vue
提供了
v-if
和
v-show
条件指令完成条件渲染
/
控制
v-if
介绍
v-show
介绍
官方文档:
https://cn.vuejs.org/v2/guide/conditional.html
7.2
应用实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>条件渲染 v-if</title>
</head>
<body>
<div id="app">
<!--这里小伙伴还可以看到 checkbox 的 checked 属性的值-->
<input type="checkbox" v-model="sel">是否同意条款[v-if 实现]
<!-- 老师解读 v-if/v-else 会根据 返回的值,来决定是否动态创建对应的子组件 <h1>
-->
<h1 v-if="sel">你同意条款</h1>
<h1 v-else>你不同意条款</h1>
</div>
<script src="vue.js"></script>
<script>
//为了调试方便, 使用 vm 接收 Vue 实例
let vm = new Vue({
el: '#app',
data: {//data 数据池
sel: false
}
})
</script>
</body>
</html>
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>条件渲染 v-show</title>
</head>
<body>
<div id="app">
<!--这里小伙伴还可以看到 checkbox 的 checked 属性的值-->
<input type="checkbox" v-model="sel">是否同意条款[v-show 实现]
<!-- 老师解读 v-if/v-else 会根据 返回的值,来决定是否动态创建对应的子组件 <h1>
-->
<h1 v-show="sel">你同意条款</h1>
<h1 v-show="!sel">你不同意条款</h1>
</div>
<script src="vue.js"></script>
<script>
//为了调试方便, 使用 vm 接收 Vue 实例
let vm = new Vue({
el: '#app',
data: {//data 数据池
sel: false
}
})
</script>
</body>
</html>
复制代码
7.3
v-if VS v-show
v-if
会确保在切换过程中,条件块内的事件监听器和子组件销毁和重建
v-show
机制相对简朴
,
不管初始条件是什么,元素总是会被渲染,而且只是对
CSS
举行切换
使用建议:假如要频仍地切换,建议使用
v-show
;假如运行时条件很少改变,使用
v-if
较好
8
列表渲染
: v-for
8.1
基本阐明
Vue
提供了
v-for
列表循环指令
官方文档:
https://cn.vuejs.org/v2/guide/list.html
对数组举行遍历
用
v-for
来遍历一个对象的
property
8.2
应用实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for 列表渲染</title>
</head>
<body>
<div id="app">
<!-- 基本语法:
<li v-for="变量 in 数字">{{ 变量 }}</li>-->
<h1>简单的列表渲染</h1>
<ul>
<li v-for="i in 3">{{i}}</li>
</ul>
<!-- <li v-for="(变量, 索引) in 值">{{ 变量 }} - {{ 索引 }}</li>-->
<h1>简单的列表渲染-带索引</h1>
<ul>
<li v-for="(i,index) in 3">{{i}}-{{index}}</li>
</ul>
<h1>遍历数据列表</h1>
<!-- 语法:
<tr v-for="对象 in 对象数组">
<td>{{对象的属性}}</td>
</tr>
-->
<table width="400px" border="1px">
<tr v-for="monster in monsters">
<td>{{monster.id}}</td>
<td>{{monster.name}}</td>
<td>{{monster.age}}</td>
</tr>
</table>
</div>
<script src="vue.js">
</script>
<script>
let vm=new Vue({
el:"#app",
data:{
monsters: [
{id: 1, name: '牛魔王', age: 800},
{id: 2, name: '黑山老妖', age: 900},
{id: 3, name: '红孩儿', age: 200}
]
}
})
</script>
</body>
</html>
复制代码
9
组件化编程
9.1
基本阐明
在大型应用开辟的时间,页面可以分别成许多部分,往往差别的页面,也会有雷同的部
分。例如可能会有雷同的头部导航。
但是假如每个页面都独自开辟,这无疑增长了我们开辟的本钱。以是我们会把页面的不
同部分拆分成独立的组件,然后在差别页面就可以共享这些组件,克制重复开辟
(
如图
)
组件
(Component)
是
Vue.js
最强盛的功能之一
(
可以提高复用性
[1.
界面
2.
业务处理
])
组件也是一个
Vue
实例,也包括∶
data
、
methods
、生命周期函数等
组件渲染需要
html
模板,以是增长了
template
属性,值就是
HTML
模板
对于全局组件,任何
vue
实例都可以直接在
HTML
中通过组件名称来使用组件
d
ata
是一个函数,不再是一个对象, 如许每次引用组件都是独立的对象
/
数据
9.2
应用实例
问题分析
点击次数会共享
假如要办理
,
需要我们定义差别的点击次数变量
(
好比
count
、
count2
、
count3
等
)
来记
录差别
也就是复用性差
实现方式
1-
普通方式
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>组件化编程</title>
</head>
<body>
<div id="app">
<!--非组件化方式-普通方式-->
<button v-on:click="click1()">点击次数= {{count}} 次【非组件化方式】</button><br/><br/>
<!--需求是,有多个按钮,都要进行点击统计
老师解读
1. 其实三个按钮界面其实一样, 但是目前我们都重新写了一次, 复用性低
2. 点击各个按钮的业务都是对次数+1, 因此业务处理类似,但是也都重新写了一个方法, 复
用性低
3. 解决===> 组件化编程
-->
<button v-on:click="click2()">点击次数= {{count2}} 次【非组件化方式】</button><br/><br/>
<button v-on:click="click3()">点击次数= {{count3}} 次【非组件化方式】</button><br/>
</div>
<script src="vue.js"></script>
<script>
new Vue({
el: "#app",
data: {//data 数据池
count: 10,
count2: 10,
count3: 10
},
methods: {//methods 属性, 可以定义相应的方法
click1() {
this.count+=1;
},
click2() {
this.count2+=1;
},
click3() {
this.count3+=1;
}
}
})
</script>
</body>
</html>
复制代码
实现方式
2-
全局组件方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件化编程-全局组件</title>
</head>
<body>
<div id="app">
<h1>组件化编程-全局组件</h1>
<counter></counter>
<counter></counter>
</div>
<script src="vue.js"></script>
<script>
//1、定义一个全局组件, 名称为 counter
//2. {} 表示就是我们的组件相关的内容
//3. template 指定该组件的界面, 因为会引用到数据池的数据,所以需要是模板字符串
//4. 这里老师说明: 要把组件视为一个 Vue 实例,也有自己的数据池和 methods
//5. 这里老师说明: 对于组件,我们的数据池的数据,是使用函数/方法返回[目的是为了保证每个组件的数据是独立], 不能使用原来的方式
//6. 这时我们达到目前,界面通过 template 实现共享,业务处理也复用
//7. 全局组件是属于所有 vue 实例,因此,可以在所有的 vue 实例使用
Vue.component("counter",{
template:`<button v-on:click="click()">点击次数={{count}}次【全局组件】</button>`,
data(){//这里需要注意,和原来的方式不一样!!!!
return {
count:10
}
},
methods:{
click(){
this.count++;
}
}
})
//创建Vue实例,必须要有
new Vue({
el:"#app",//Vue的实例挂载点
})
</script>
</body>
</html>
复制代码
实现方式
3-
局部组件方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件化编程-局部组件</title>
</head>
<body>
<div id="app">
<!--使用局部组件 ,该组件是从挂载到 app 的 vue 中的-->
<h1>组件化编程-局部组件</h1>
<my_counter></my_counter>
</div>
<script src="vue.js"></script>
<script>
//1、定义一个局部组件, 名称为 buttonCounter
//1. 可以把常用的组件,定义在某个 commons.js 中 export
//2. 如果某个页面需要使用, 直接 import
const buttonCounter={
template:`<button v-on:click="click()">点击次数={{count}}次【局部组件】</button>`,
data(){//这里需要注意,和原来的方式不一样!!!!
return {
count:10
}
},
methods:{
click(){
this.count++;
}
}
}
//创建Vue实例,必须要有
new Vue({
el:"#app",//Vue的实例挂载点
components: {
//引入/注册某个组件, 此时 my_counter 就是一个组件, 是一个局部组件,他的使用范围在当前 vue
'my_counter':buttonCounter
}
})
</script>
</body>
</html>
复制代码
9.3
组件化小结
假如方法体
,
只有简朴的语句
,
好比
count++,
那么可以举行简写
组件定义需要放置在
new Vue()
前,否则组件注册会失败
组件也是一个
Vue
实例,因此它的定义是也存在∶
data
、
methods
、生命周期函数等
data
是一个函数,不再是一个对象, 如许每次引用组件都是独立的对象
/
数据
组件渲染需要
html
模板,以是增长了
template
属性,值就是
HTML
模板
10
生命周期和监听函数
(
钩子函数
)
10.1 基本阐明
Vue
实例有一个完备的生命周期,也就是说从开始创建、初始化数据、编译模板、挂载
DOM
、渲染
-
更新
-
渲染、卸载等一系列过程,我们称为
Vue
实例的生命周期
钩子函数
(
监听函数
): Vue
实例在完备的生命周期过程中
(
好比设置数据监听、编译模
板、将实例挂载到
DOM
、在数据变化时更新
DOM
等
),
也会运行叫做生命周期钩子的函
数
钩子函数的 作用
就是在某个阶段
,
给步调员一个做某些处理的机会
10.2 生命周期示意图
1) new Vue()
new 了一个
Vue
的实例对象,此时就会进入组件的创建过程。
2) Init Events & Lifecycle
初始化组件的事件和生命周期函数
3)
beforeCreate
组件创建之后遇到的第一个生命周期函数,这个阶段 data
和
methods
以及
dom
结构都未
被初始化,也就是获取不到
data
的值,不能调用
methods
中的函数
4) Init injections & reactivity
这个阶段中,
正在初始化
data
和
methods
中的方法
5)
created
- 这个阶段组件的
data
和
methods
中的方法已初始化竣事,可以访问,但是
dom
结构未
初始化,页面未渲染
-
阐明
:在这个阶段,常常会发起
Ajax
哀求
6)
编译模板结构
(
在内存
)
7)
beforeMount
当模板在内存中编译完成,此时内存中的模板结构还未渲染至页面上,看不到真实的数据
8) Create vm.$el and replace ‘el’ with it
这一步,再在把内存中渲染好的模板结构替换至真实的 dom
结构也就是页面上
9)
mounted
此时,页面渲染好,用户看到的是真实的页面数据, 生命周期创建阶段完毕,进入到了运
行中的阶段
10)
生命周期运行中
10.1
beforeUpdate
当执行此函数,数据池的数据新的,但是页面是旧的
10.2 Virtual DOM re-render and patch
根据最新的 data 数据,重新渲染内存中的模板结构,并把渲染好的模板结构,替换至页面
上
10.3
updated
页面已经完成了更新,此时,
data
数据和页面的数据都是新的
11) beforeDestroy
当执行此函数时,组件即将被销毁,但是还没有真正开始销毁,此时组件的 data
、
methods
数据或方法 还可被调用
12) Teardown……
注销组件和事件监听
13) destroyed
组件已经完成了销毁
10.3
应用实例
10.3.1 需求分析
需求
:
展示
VUE
实例生命周期和 钩子函数
/
监听函数
/
生命周期函数 执行时机
1)
重 点 研 究 几 个 重 要 的 钩 子 函 数
(beforeCreate, created, beforeMount, mounted,
beforeUpdate, updated)
2)
在这几个钩子函数中
,
数据模型是否加载
/
使用
?
自定义方法是否加载
/
可用
? html
模
板是否加载
/
使用
? html
模板是否完成渲染
?
10.3.2
代码实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue生命周期和钩子函数</title>
</head>
<body>
<!--这里可以视为用户看到的页面-对应前面讲解的页面 dom-->
<div id="app">
<span id="num">{{num}}</span>
<button @click="num++">赞!</button>
<h2>{{name}},有{{num}}次点赞</h2>
</div>
<script src="vue.js"></script>
<script>
let vm=new Vue({
el:"#app",
data:{
//数据池
name:"kristina",
num:0
},
methods:{
show(){
return this.name;
},
add(){
this.num++;
}
},
beforeCreate(){
//生命周期函数-创建Vue实例前
console.log("=============beforeCreate==========");
console.log("数 据 模 型 / 数 据 池 的 数 据 是 否 加 载 / 使 用 ?[no]",this.name," ",this.num);//undefined undefined
//console.log("自定义方法是否加载/使用?[no]", this.show());
console.log(" 用 户 页 面 dom 是 否 加 载 / 使 用 ?[yes]", document.getElementById("num"));//;yes
console.log(" 用 户 页 面 dom 是 否 被 渲 染 ?[no]", document.getElementById("num").innerText);
},
created(){
//生命周期函数-创建Vue实例前
console.log("=============created==========");
console.log("数 据 模 型 / 数 据 池 的 数 据 是 否 加 载 / 使 用 ?[yes]",this.name," ",this.num);
console.log("自定义方法是否加载/使用?[yes]", this.show());
console.log(" 用 户 页 面 dom 是 否 加 载 / 使 用 ?[yes]", document.getElementById("num"));//;yes
console.log(" 用 户 页 面 dom 是 否 被 渲 染 ?[no]", document.getElementById("num").innerText);
//可以发出 Ajax
//接收返回的数据
//再次去更新 data 数据池的数据
//编译内存模板结构
//.....
},
beforeMount() {//生命周期函数-挂载前
console.log("=============beforeMount==========");
console.log(" 数 据 模 型 / 数 据 池 的 数 据 是 否 加 载 / 使 用 ?[yes]",
this.name, " ", this.num);
console.log("自定义方法是否加载/使用?[yes]", this.show());
console.log(" 用 户 页 面 dom 是 否 加 载 / 使 用 ?[yes]", document.getElementById("num"));
console.log(" 用 户 页 面 dom 是 否 被 渲 染 ?[no]", document.getElementById("num").innerText);
},
mounted() {//生命周期函数-挂载后
console.log("=============mounted==========");
console.log(" 数 据 模 型 / 数 据 池 的 数 据 是 否 加 载 / 使 用 ?[yes]",
this.name, " ", this.num);
console.log("自定义方法是否加载/使用?[yes]", this.show());
console.log(" 用 户 页 面 dom 是 否 加 载 / 使 用 ?[yes]", document.getElementById("num"));
console.log(" 用 户 页 面 dom 是 否 被 渲 染 ?[yes]", document.getElementById("num").innerText);
},
beforeUpdate() {//生命周期函数-数据池数据更新前
console.log("=============beforeUpdate==========");
console.log(" 数 据 模 型 / 数 据 池 的 数 据 是 否 加 载 / 使 用 ?[yes]",
this.name, " ", this.num);
console.log("自定义方法是否加载/使用?[yes]", this.show());
console.log(" 用 户 页 面 dom 是 否 加 载 / 使 用 ?[yes]", document.getElementById("num"));
console.log(" 用 户 页 面 dom 数 据 是 否 被 更 新 ?[no]", document.getElementById("num").innerText);
//验证数据==>修正
// if(this.num < 10 ) {
// this.num = 8;
// }
},
updated() {//生命周期函数-数据池数据更新后
console.log("=============updated==========");
console.log(" 数 据 模 型 / 数 据 池 的 数 据 是 否 加 载 / 使 用 ?[yes]",
this.name, " ", this.num);
console.log("自定义方法是否加载/使用?[yes]", this.show());
console.log(" 用 户 页 面 dom 是 否 加 载 / 使 用 ?[yes]", document.getElementById("num"));
console.log(" 用 户 页 面 dom 数 据 是 否 被 更 新 ?[yes]", document.getElementById("num").innerText);
}
})
</script>
</body>
</html>
复制代码
11
Vue2
脚手架模块化开辟
11.1 安装
npm 报错办理
npm -v报错-CSDN博客
1.
搭建
Vue
脚手架工程,需要使用到
NPM(node package manager), npm
是随
nodejs
安装
的一款包管理工具
,
类似
Maven
。以是我们需要先安装
Nodejs
2.
为了
更好兼容
,这里我们安装
node.js10.16.3
, 要求也使用这个版本
(
因为这里
只是演示
Vue
脚手架工程
),
后面还会讲解
Vue3
的脚手架工程搭建
,
再对
Node
升级
.
3.
假如以前安装过
node.js ,
为防止版本辩论,先卸载之
,
假如你没安装
nodejs,
就不用管
下载
node.js10.16.3
地址
:
https://nodejs.org/en/blog/release/v10.16.3
/
安装
node.js10.16.3 ,
直接下一步即可
,
安装到
d:\program\nodejs10.16【自定义】
6.
验证是否安装成功
,
假如看到不到
,
退出
cmd,
重新开一个窗口测试即可
7 先删除以前的
cli
版本
<
不论是之前未下载或没有下载
>
npm uninstall vue-cli -g
8 安装淘宝镜像
-cnpm
安装
webpack
和
webpack-cli ,
指令
: npm install webpack@4.41.2 webpack-cli -D
9
安装
cnpm install -g @vue/cli@4.0.3
10 确认
Vue-Cli
版本
11.
创建目次
vue_project,
并
cmd
到该目次
12.
使用
webpack
创建
vue
脚手架项目
(
提醒
:假如出现了
downloadingtemplate....,
60s退出窗口,
重新来操纵一次即可
.)【基本坑全遇见了,呜呜·】
12
浏览器:
http://localhost:8080
11.2
运行项目
1.
将
Vue
脚手架项目,直接拖到
IDEA
,就可以打开
2.
配置
NPM
3.
效果
11.3
Vue
项目结构分析
Vue
哀求页面执行流程
11.4
应用实例
-Vue
项目引入
ElementUI
在
Vue2
项目中
,
使用
ElementUI
组件
,
如图
ElementUI
官网
: https://element.eleme.cn/#/zh-CN
安装
element-ui
组件库
, cmd
下进入到项目,指令
npm i element-ui@2.12.0
主要的代码是components里面的组件内容,和router里面的路由
<template>
<!-- 模板表示页面视图html-->
<div>
<h1>{{msg}}</h1>
<!-- element-ui 组件 -->
<el-row>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>
<table >
<tr>
<td colspan="3">第1行第1列</td>
</tr>
<tr>
<td rowspan="2">第2行第1列</td>
<td>第2行第2列</td>
<td>第2行第3列</td>
</tr>
<tr>
<td>第3行第2列</td>
<td>第3行第3列</td>
</tr>
<tr>
<td rowspan="2">第4行第1列</td>
<td>第4行第2列</td>
<td>第4行第3列</td>
</tr>
<tr>
<td>红烧肉<img src="@/assets/2.png" width="100"></td>
<td>第5行第3列</td>
</tr>
</table>
</div>
</template>
<!--定义数据操作方法,默认导出-->
<script>
export default {
name: "Hsp",
data(){
return {
msg: "Welcome to Vue"
}
}
}
</script>
<!-- 样式-->
<style scoped>
div{
width: 900px;
background-color: aliceblue;
margin: 0 auto;
}
h1{
color: red;
}
table,tr,td {
border: 1px solid red;
margin: 0 auto;
width: 600px;
border-collapse: collapse;
height: 50px;
}
</style>
复制代码
router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import hello from '@/components/hello'
import Hsp from '@/components/Hsp'
Vue.use(Router)
export default new Router({
routes: [//路由表
{
path: '/',
name: 'HelloWorld',
component: HelloWorld
},
{
path: '/hello',
name: 'hello',
component: hello
},
{
path: '/Hsp',
name: 'Hsp',
component: Hsp
}
]
})
复制代码
二、
Axios
1.基本阐明
axios
是独立于
vue
的一个项目,不是
Vue
的一部分
axios
通常和
Vue
一起使用,实现
Ajax
操纵
Axios
是一个基于
promise
的
HTTP
库
https://javasoho.com/axios/
Axios
库文件
使用
axios
需要引入
axios
库文件
可以直接引入
也可以下载
axios.min.js
,在本地引入
2
Axios
应用实例
需求
:
在
Vue
项目中使用
Axios,
从服务器获取
json
数据
,
显示在页面
代码实现
创建
D:\hspedu_
前端技术栈
_temp\axios\response.data.json
将
JSON
对象转成
JSON.stringify(response)
记得导包哦,
data.json
{ "success": true,
"message": "成功",
"data":
{ "items": [
{ "name": "牛魔王", "age": 800
},
{ "name": "红孩儿", "age": 500
},
{ "name": "蜈蚣精", "age": 200
}
]
}
}
复制代码
axios_quick_start.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>axios的应用实例</title>
</head>
<body>
<div id="app">
<h1>{{msg}}</h1>
<table border="1px" width="200px">
<tr>
<td>名字</td>
<td>年龄</td>
</tr>
<tr v-for="monster in monsterList">
<td>{{monster.name}}</td>
<td>{{monster.age}}</td>
</tr>
</table>
</div>
<script src="axios.min.js"></script>
<script src="vue.js"></script>
<script>
new Vue({
el:"#app",
data:{
monsterList:[],//表示妖怪的信息数组
msg:"妖怪信息表格"
},
methods:{
//定义方法
list(){//发送ajax请求,获取数据axios
/** 解读
* 1. 使用 axios 发送 ajax 请求
* 2. 语 法 格 式 axios. 请 求 方 式 ( 请 求 路 径 ).then( 箭 头 函
数).catch(箭头函数)
* 3. 请求成功,执行 then 的函数, response 就是返回的数据, 名
字有程序员确定
* 4. 请求失败, 执行 catch 的函数
* 5. this.monsterList = response.data.data.items 把 返 回 的
data.items 赋给 monsterList
* 6. 这里的 http://127.0.0.1:63342/axios/response.data.json 路
径需要根据实际的端口和资源名来修改
*/
axios.get("http://localhost:63342/axios/response/data.json")
.then((responseData)=>{
console.log("responseData=",responseData);
console.log("responseData.data.data.items=",responseData.data.data.items);
this.monsterList=responseData.data.data.items;
}).catch(err=>{
console.log(err);
})
}
},
created(){
this.list();
}
})
</script>
</body>
</html>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4