一、基础知识:
1.基础概念:
Vue是一套用于构建用户界面的渐进式框架
2.在vscode中抽取vue代码片段:
文件=>首选项=>用户代码片段=>新建全局代码片段/或文件夹代码片段:
vue-html.code-snippets{
{
"vue htm": {
"scope": "html",
"prefix": "vuehtml",
"body": [
"<!DOCTYPE html>",
"<html lang=\"en\">",
"",
"<head>",
" <meta charset=\"UTF-8\">",
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
" <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">",
" <title>Document</title>",
"</head>",
"",
"<body>",
" <div id=\"app\">",
"",
" </div>",
" <script src=\"vue.min.js\"></script>",
" <script>",
" new Vue({",
" el: '#app',",
" data: {",
" $1",
" }",
" })",
" </script>",
"</body>",
"",
"</html>",
],
"description": "my vue template in html"
}
}
}
默认的模板路径存放地址:
C:\Users\用户\AppData\Roaming\Code - Insiders\User\snippets\vue-html.code-snippets
二、vue基本语法
1.入门
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 引入相关js文件 -->
<script src="vue.min.js"></script>
<div id="vueTest">
<!-- 使用差值表达式{{}}获得vue对象中的数据 -->
<h1>{{message}}</h1>
</div>
<script>
// 创建vue对象
new Vue({
el:'#vueTest',//绑定vue作用的范围,其底层是$("#vueTest")
data:{//定义页面中显示的模型数据
message:'hello Vue!!!!!!!!!!!!'//随便写内容,类似函数体
}
})
</script>
</body>
</html>
2.基本语法:
{{}}表达式的使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<!-- 使用差值表达式{{}}获得vue对象中的数据 -->
<h1>{{message}}</h1>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
message:'测试Vue代码片段!!!!!!!!!!!!'//随便写内容,类似函数体
}
})
</script>
</body>
</html>
单项绑定:v-bind指令
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<!--
v-bind指令(单项数据绑定):这一指令一般用在标签属性里面,获取值
-->
<h1 v-bind:title="message">
{{content}}
</h1>
<!-- 简写方式 -->
<h2 :title="message">
{{content}}
</h2>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
content:'这是标题',
message:'页面加载于'+new Date().toDateString()
}
})
</script>
</body>
</html>
双向绑定:v-model指令
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<!-- 单项绑定 -->
<input type="text" v-bind:value="searchMap.keyWord"></input>
<!-- 双向绑定 -->
<input type="text" v-model="searchMap.keyWord"></input>
<p>
{{searchMap.keyWord}}
</p>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
searchMap:{
keyWord:'lixxkv'
}
}
})
</script>
</body>
</html>
事件的绑定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<!-- vue中绑定事件 -->
<Button v-on:click="search()">查询</Button>
<!-- vue中绑定事件简写 -->
<Button @click="search()">查询1</Button>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
searchMap:{
keyWord:'lixxkv'
},
//查询结果
result:{}
},
methods:{//定义多个方法
search(){
console.log('search.....!!!!!');
},
fun(){
console.log('fun.........');
}
}
})
</script>
</body>
</html>
修饰符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<form action="save" v-on:submit.prevent="onSubmit">
<input type="text" id="name" v-model="user.username"/>
<button type="submit">保存</button>
</form>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
user:{}
},
methods:{
onSubmit() {
if (this.user.username) {
console.log('提交表单')
} else {
alert('请输入用户名')
}
}
}
})
</script>
</body>
</html>
条件判断:v-if;v-else指令
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<input type="checkbox" v-model="ok"/>是否同意
<!-- 条件指令 v-if;v-else-->
<h1 v-if="ok">lixxkv</h1>
<h3 v-else>kkpt</h3>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
ok:false
}
})
</script>
</body>
</html>
循环:v-for指令
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="n in 10">
{{n}}
</li>
</ul>
<ol>
<li v-for="(n,index) in 10">
{{n}}----{{index}}
</li>
</ol>
<hr/>
<table border="1">
<tr v-for="user in userList">
<td>{{user.id}}</td>
<td>{{user.username}}</td>
<td>{{user.age}}</td>
</tr>
</table>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
userList:[
{id:1,username:'anly',age:19},
{id:2,username:'koko',age:20},
{id:3,username:'andy',age:17}
]
}
})
</script>
</body>
</html>
三、组件
1.作用扩展html元素,封装可重用代码
组件实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<Navbar></Navbar>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
//定义vue使用的组件
components: {
//组件名字
'Navbar':{
//组件内容
template:'<ul><li>首页</li><li>学员管理</li></ul>'
}
}
})
</script>
</body>
</html>
全局组件
//定义全局组件
Vue.component('Navbar',{
//组件内容
template:'<ul><li>首页</li><li>学员管理</li><li>讲师管理</li></ul>'
})
=====================分隔符==========================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<Navbar></Navbar>
</div>
<script src="vue.min.js"></script>
<script src="components/Navbar.js"></script>
<script>
new Vue({
el: '#app',
data: {
}
})
</script>
</body>
</html>
vue生命周期(简单了解)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
hello
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {},
created(){
// debugger//断点操作
//在页面渲染之前执行
console.log('created()方法执行了......')
},
mounted(){
// debugger//断点操作
//在页面渲染之后执行
console.log('mounted()方法执行!!!!!!!')
}
})
</script>
</body>
</html>
vue路由
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<h1>Hello App!</h1>
<p>
<!-- 使用 router-link 组件来导航. -->
<!-- 通过传入 `to` 属性指定链接. -->
<!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
<router-link to="/">首页</router-link>
<router-link to="/student">会员管理</router-link>
<router-link to="/teacher">讲师管理</router-link>
</p>
<!-- 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
</div>
<!-- vue的引入有顺序关系 -->
<script src="vue.min.js"></script>
<script src="vue-router.min.js"></script>
<script>
// 1. 定义(路由)组件。
// 可以从其他文件 import 进来
const Welcome = { template: '<div>欢迎</div>' }
const Student = { template: '<div>student list</div>' }
const Teacher = { template: '<div>teacher list</div>' }
// 2. 定义路由
// 每个路由应该映射一个组件。
const routes = [
{ path: '/', redirect: '/welcome' }, //设置默认指向的路径
{ path: '/welcome', component: Welcome },
{ path: '/student', component: Student },
{ path: '/teacher', component: Teacher }
]
// 3. 创建 router 实例,然后传 `routes` 配置
const router = new VueRouter({
routes // (缩写)相当于 routes: routes
})
// 4. 创建和挂载根实例。
// 从而让整个应用都有路由功能
new Vue({
el: '#app',
router
})
</script>
</body>
</html>
四、axios
1、基本概念:
axios是一个独立的项目,但axios常常和vue联合使用,实现在vue中发送ajax请求。
2、axios应用场景:
前后端异步数据交换
3、axios使用:
vue使用axios的固定模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<!-- 引入相关js文件 -->
<script src="vue.min.js"></script>
<script src="axios.min.js"></script>
<script>
new Vue({
el: '#app',
//固定结构
data: {//在data中定义变量和初始结构
},
created(){//在页面渲染前执行
//调用定义的方法
},
methods:{//编写具体方法
}
})
</script>
</body>
</html>
vue使用axios的案例一:
//构建json对象
{
"success":true,
"code":20000,
"message":"成功",
"data":{
"items":[
{"name":"张三丰","age":18},
{"name":"郭靖","age":17},
{"name":"乔峰","age":19}
]
}
}
==================================分隔符=========================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<!-- 把userList数组中的值显示 -->
<div v-for="user in userList">
{{user.name}}--{{user.age}}
</div>
</div>
<!-- 引入相关js文件 -->
<script src="vue.min.js"></script>
<script src="axios.min.js"></script>
<script>
new Vue({
el: '#app',
//固定结构
data: {//在data中定义变量和初始结构
//定义变量
userList:[]
},
created(){//在页面渲染前执行
//调用定义的方法
this.getUserList()
},
methods:{//编写具体方法
//创建方法查询所有用户数据
getUserList(){
//使用axios发送ajax请求
//axios.提交方式("请求接口路径").then(箭头函数).catch(箭头函数)
axios.get("data.json")
.then(response =>{//response是自定义的变量用于接收后端的响应数据
console.log(response)
//通过response获取数据,赋值给定义的空数组
this.userList=response.data.data.items
console.log(this.userList)
})//请求成功执行then方法
.catch(error =>{//error是自定义的变量
})//请求失败执行catch方法
}
}
})
</script>
</body>
</html>