作为只搞后端程序的我本来只掌握前端三件套和thymeleaf就够了,奈何疫情在家做毕设,做着做着发现现在好的前端模板几乎都是基于Vue构建了。大二绘蓝杯结束后邓刚学长就提议过让我学一学Vue,奈何后面的时间断断续续只是零零散散的学,这次决定静下来,好好补补这一块。
PS:本次学习是跟着B站视频vue教程-黑马-vue2.4–vuejs-vue.js-205集完整版-前端框架-前端-刘龙宾-刘龙宾0225(该视频已被up主下架,刘龙宾老师B站上有账号,可以去那里找)来学的,所以笔记中内容大多来自其文案及案例源码。
<div id="app">
<div>{{msg}}div>
<div v-text='msg'>div>
<div v-html='msg1'>div>
<div v-pre>{{msg}}div>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
/*
1、v-text指令用于将数据填充到标签中,作用于插值表达式类似,但是没有闪动问题
2、v-html指令用于将HTML片段填充到标签中,但是可能有安全问题
例如:XXS攻击,所以用户post的数据不能用该指令填充.
3、v-pre用于显示原始信息(即啥都不干,是什么就是什么)
*/
var vm = new Vue({
el: '#app',
data: {
msg: 'Hello Vue',
msg1: '<h1>HTMLh1>'
}
});
<div id="app">
<div>{{msg}}div>
<div>
<input type="text" v-model='msg'>
div>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
/*
双向数据绑定
1、从页面到数据
2、从数据到页面
*/
var vm = new Vue({
el: '#app',
data: {
msg: 'Hello Vue'
}
});
script>
这个应该很熟悉了,我就不截图了(反正我也懒得搞动态图)
<div id="app">
<div>{{num}}div>
<div>
<button v-on:click='handle1'>点击1button>
<button v-on:click='handle2(123, 456, $event)'>点击2button>
div>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
num: 0
},
methods: {
handle1: function(event) {
console.log(event.target.innerHTML)
},
handle2: function(p, p1, event) {
console.log(p, p1)
console.log(event.target.innerHTML)
this.num++;
}
}
});
script>
<div>
<button v-on:click='num++'>点击button>
<button @click='num++'>点击1button>
<button @click='handle'>点击2button>
<button @click='handle()'>点击3button>
div>
以及最后两个button
实现的效果是一样的。
<div id="app">
<div>{{num}}div>
<div v-on:click='handle0'>
<button v-on:click.stop='handle1'>点击1button>
div>
<div>
<a href="http://www.baidu.com" v-on:click.prevent='handle2'>百度a>
div>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
/*
事件绑定-事件修饰符
*/
var vm = new Vue({
el: '#app',
data: {
num: 0
},
methods: {
handle0: function(){
this.num++;
},
handle1: function(event){
// 阻止冒泡
// event.stopPropagation();
},
handle2: function(event){
// 阻止默认行为
// event.preventDefault();
}
}
});
script>
<div id="app">
<a v-bind:href="url">百度a>
<a :href="url">百度1a>
<button v-on:click='handle'>切换button>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
/*
属性绑定
*/
var vm = new Vue({
el: '#app',
data: {
url: 'http://www.baidu.com'
},
methods: {
handle: function(){
// 修改URL地址
this.url = 'http://itcast.cn';
}
}
});
script>
点击了切换后第一个百度
地址将会换成 http://itcast.cn。
<div id="app">
<div v-if='score>=90'>优秀div>
<div v-else-if='score<90&&score>=80'>良好div>
<div v-else-if='score<80&&score>60'>一般div>
<div v-else>比较差div>
<div v-show='flag'>测试v-showdiv>
<button v-on:click='handle'>点击button>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
/*
分支结构
v-show的原理:控制元素样式是否显示 display:none
*/
var vm = new Vue({
el: '#app',
data: {
score: 10,
flag: false
},
methods: {
handle: function(){
this.flag = !this.flag;
}
}
});
script>
<div id="app">
<div>水果列表div>
<ul>
<li v-for='item in fruits'>{{item}}li>
<li v-for='(item, index) in fruits'>{{item + '---' + index}}li>
<li :key='item.id' v-for='(item, index) in myFruits'>
<span>{{item.ename}}span>
<span>-----span>
<span>{{item.cname}}span>
li>
ul>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
/*
循环结构-遍历数组
*/
var vm = new Vue({
el: '#app',
data: {
fruits: ['apple', 'orange', 'banana'],
myFruits: [{
id: 1,
ename: 'apple',
cname: '苹果'
},{
id: 2,
ename: 'orange',
cname: '橘子'
},{
id: 3,
ename: 'banana',
cname: '香蕉'
}]
}
});
script>
<div id="app">
<div v-if='v==13' v-for='(v,k,i) in obj'>{{v + '---' + k + '---' + i}}div>
div>
<script type="text/javascript" src="js/vue.js">script>
<script type="text/javascript">
// 使用原生js遍历对象
var obj = {
uname: 'lisi',
age: 12,
gender: 'male'
}
for(var key in obj) {
console.log(key, obj[key])
}
/*
循环结构
*/
var vm = new Vue({
el: '#app',
data: {
obj: {
uname: 'zhangsan',
age: 13,
gender: 'female'
}
}
});
script>