Vue.js的一些学习笔记
1.vue基本语法
- v-bind单向绑定:
vue中除了使用插值表达式{{}}
渲染数据,还可以使用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> -->
<!-- 简写的方式 -->
<h1 :title="message">
{{content}}
</h1>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
content:'我是标题',
message:'页面加载与' + new Date().toLocaleString()
}
})
</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" :value="searchMap.keyword">
<!-- 双向绑定 -->
<input type="text" v-model="searchMap.keyword">
<hr>
<p>{{searchMap.keyword}}</p>
<!--
单向绑定修改后只是当前位置会发生数据改变
双向绑定修改后会将其他所有地方都改变
-->
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
searchMap:{
keyword:'陈锦顺'
}
}
})
</script>
</body>
</html>
- 事件:
使用v-on
进行数件处理,v-on:click
表示处理鼠标点击事件,事件调用的方法定义在 vue 对象声明的 methods 节点中。
<!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()">查询结果1</button>
<!-- vue绑定事件简写 -->
<button @click="search()">查询结果2</button>
<p>您要查询的是:{{student.name}}</p>
<p><a v-bind:href="result.site" target="_blank">{{result.name}}</a></p>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
student:{
name :'陈锦顺'
},
//查询结果
result:{
}
},
methods:{
search() {
console.log("search...");
this.result = {
"name" : "陈锦顺",
"site" : "www.baidu.com"
}
}
}
})
</script>
</body>
</html>
- 修饰符 (Modifiers) 是以半角句号
(.)
指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault():即阻止事件原本的默认行为
<!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-on:submit.prevent阻止表单提交的默认行为 -->
<form action="save" @submit.prevent="onsubmit()">
<!-- 输入值就会双向绑定user中 -->
<input type="text" id="name" v-model="user.name">
<button type="submit">保存</button>
</form>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
user:{}
},
methods: {
onsubmit(){
if(this.user.name){
alert("已提交表单")
}else{
alert("请输入用户名")
}
}
}
})
</script>
</body>
</html>
- v-if条件渲染:
<!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-on:submit.prevent阻止表单提交的默认行为 -->
<form action="save" @submit.prevent="onsubmit()">
<!-- 输入值就会双向绑定user中 -->
<input type="text" id="name" v-model="user.name">
<button type="submit">保存</button>
</form>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
user:{}
},
methods: {
onsubmit(){
if(this.user.name){
alert("已提交表单")
}else{
alert("请输入用户名")
}
}
}
})
</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>
<!-- index是从0开始的,n是从1开始 -->
<li v-for="(n,index) in 10">{{n}} -- {{index}}</li>
</ol>
<hr/>
<table border="1">
<tr v-for="user in userList">
<!-- <tr v-for="(user,index1) 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: 'helen', age: 18 },
{ id: 2, username: 'peter', age: 28 },
{ id: 3, username: 'andy', age: 38 }
]
},
methods: {
}
})
</script>
</body>
</html>
2.组件
组件(Component)是 Vue.js 最强大的功能之一。
组件可以扩展 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',
data: {
},
// 定义vue使用的组件
components: {
//组件的名称
'Navbar':{
//组件的内容
template: '<ul><li>首页</li><li>学员管理</li></ul>'
}
}
})
</script>
</body>
</html>
3.vue的生命周期
vue的生命周期总的有:
beforeCreate
,created
,beforeMount
,mounted
,beforeUpdate
,updated
,beforeDestroy
,destroyed
。
其中created
和mounted
较为重要。
<!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">
<button @click="update">update</button>
<h3 id="h3">{{message}}</h3>
</div>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
message:"床前明月光"
},
//在页面渲染之后执行
mounted(){
debugger //在前端打断点
console.log("mounted...")
},
//在页面渲染之前执行(不与代码顺序有关)
created(){
debugger
console.log('created...')
},
methods: {
show(){
console.log('执行了show方法');
},
update(){
this.message="玻璃好上霜"
}
}
})
</script>
</body>
</html>
4.路由
Vue.js 路由允许我们通过不同的 URL 访问不同的内容。
Vue.js 路由需要载入 vue-router 库
<!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>
<router-link to="/teacher">教师管理</router-link>
</p>
<!-- router-view 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
</div>
<!-- 注意这里路由的js文件一定要放在vue的下方! -->
<script src="vue.min.js"></script>
<script src="vue-router.min.js"></script>
<script>
// 1.定义组件,可以从其他文件import进来
const welcome = {template : '<div>欢迎</div></div>'}
const teacher = {template : '<div>教师列表</div>'}
const student = {template : '<div>学生列表</div>'}
// 2.定义路由,每个路由应该映射一个组件
const routes = [
{path : '/', redirect : '/welcome'},
{path : '/welcome', component : welcome},
{path : '/teacher', component : teacher},
{path : '/student', component : student}
]
// 3.创建router实例,然后传routes配置
const router = new VueRouter({routes})
// 4.创建和挂载根实例,从而让整个y应有都有路由功能
const app = new Vue({
el: '#app',
router
})
</script>
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix