后端必备之VUE基础【黑马程序员】
黑马程序员4小时入门VUE传送门
1. 简介
Vue
是一个操作JavaScript
的框架,类似于jQuery
,但比jQuery
好用,是现在的主流
2. 测试例子
<!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>Documents</title></head><body><div id="app">{{message}}</div><script src="../Resources/vue.js"></script><!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> --><script>var app = new Vue({el: "#app",data: {message: "sss "},});</script></body>
</html>

3. el
挂载点
<div id="app" class="app">{{message}}</div>
<script>var app = new Vue({// .app对应的是class选择器,div对应的是标签选择器,el都可以挂载el: "#app", // 此处是el挂载点,#对应的是id选择器,因此data会出现在id为app的组件中data: {message: "sss ",}});</script>
1. Vue
实例的作用范围是什么呢?
Vue
会管理el
选项命中的元素及其内部的后代元素【即可以嵌套发挥作用】
2. 是否可以使用其他的选择器?
可以使用其他的选择器,但是建议使用
ID
选择器
3. 是否可以设置其他的dom
元素呢?
可以使用其他的双标签,不能使用
HTML
和BODY
4. data
数据对象
<div id="app"><!-- 字符串直接访问 --><h1>{{message}}</h1><!-- 键值对通过.key的方式访问 --><h1>{{people.name}}</h1><!-- 数组通过下标访问 --><h1>{{children[0]}}</h1>
</div>
<script>var app = new Vue({el: "#app",// data内部可以放字符串,键值对,数组等data: {message: "Hello,World!",people:{name:"Melon",mobile:"123"},children:["a","b","c"]},});</script>

Vue
中用到的数据定义在data
中data
中可以写复杂类型的数据- 渲染复杂类型数据时,遵守
js
的语法即可
5. Vue
指令
5.1 v-text
指令
v-text
指令的作用是设置标签的内容,使用此标签会覆盖标签内原本的内容
<div id="app"><!-- 使用插值表达式{{}}读取data元素的内容,用+的方式拼接 --><h1>{{message+'哈哈'}}</h1><!-- Hello,World!不显示,其内容被v-text覆盖 --><h1 v-text="message">Hello,World!</h1><!-- v-text内也可用+进行拼接 --><h1 v-text="message+'呀'"></h1>
</div>
<script>var app = new Vue({el: "#app",data: {message: "你好!"},});
</script>

5.2 v-html
指令
其大致与
v-text
一致,不过在引用部分有html
语法时会被解析
<div id="app"><h1 v-text="message"></h1><!-- 此时html语句会被渲染 --><h1 v-html="message"></h1>
</div>
<script>var app = new Vue({el: "#app",data: {message: "<a href=www.baidu.com>百度</a>"},});
</script>

5.3 v-on
指令
v-on
指令用于操作事件,@
符号等价于v-on:
<div id="app"><input type="button" value="核武发射1" v-on:click="FBIWarnning" /><input type="button" value="核武发射2" @click="FBIWarnning" /><!-- dbl是double的意思即双击事件 --><input type="button" value="双击发射" @dblclick="FBIWarnning" /><h1 @click="changeFood">{{food}}</h1>
</div>
<script>var app = new Vue({el: "#app",data: {food: "黯然销魂饭",},// method和data一样是关键字,内放函数methods: {FBIWarnning: function () {alert("一级戒备!!!!");},changeFood: function () {this.food += "不咋地";},},});
</script>

多次点击“黯然销魂饭”会进行字符串的拼接

传入参数
<!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>Documents</title></head><body><div id="app"><!-- 为点击事件绑定两个参数,字符串参数需要用单引号 --><input type="button" value="点击" @click="doIt('哎呀','妈呀!')"><!-- 锁定回车键按下时响应 --><input type="text" @keyup.enter="sayHi"></div><script src="../Resources/vue.js"></script><!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> --><script>var app = new Vue({el: "#app",methods:{// 传入的两个参数doIt:function(p1,p2){alert(p1)alert(p2)},sayHi:function(){alert("吃了没")}}});</script></body>
</html>

5.4 计数器实现
<!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>Documents</title></head><body><div id="app"><!-- 计数器区域 --><div class="input-num"><button @click="sub">-</button><span>{{num}}</span><button @click="add">+</button></div></div><script src="../Resources/vue.js"></script><!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> --><script>var app = new Vue({el: "#app",data: {num: 1,},methods:{add:function(){if(this.num<10){this.num++;}else{alert('最大啦!')}},sub:function(){if(this.num>0){this.num--}else{alert('最小啦!')}}}});</script></body>
</html>

5.5 v-show
指令
为
true
时当前组件显示,为false
时当前组件隐藏
<!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>Documents</title></head><body><div id="app"> <input type="button" value="切换显示状态" @click="changeIsShow"><input type="button" value="累加年龄" @click="addAge"><!-- isShow()函数每次对布尔值取反,因此可以实现状态切换的功能 --><img v-show="isShow" src="../Resources/good.jpg"><!-- 此处直接传入逻辑判断表达式也行 --><img v-show="age>=18" src="../Resources/good.jpg"></div><script src="../Resources/vue.js"></script><!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> --><script>var app = new Vue({el: "#app",data: {isShow:false,age:17},methods:{changeIsShow:function(){// 每次取反this.isShow=!this.isShow;},addAge:function(){this.age++;}}});</script></body>
</html>
5.6 v-if
指令
用法与
v-show
类似,不过其是直接操作DOM
元素【即为false
时,整体预计都会消失而不是只修改display
样式】
5.7 v-bind
指令
v-bind
指令的作用是:为元素绑定属性- 完整写法是
v-bind
:属性名 - 简写的话可以直接省略
v-bind
,只保留:属性名
<!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>Documents</title><style>/* 自定义样式,.开头是类样式 */.active {border: 1px solid red;}</style></head><body><div id="app"><!-- src属性是地址,vue中可以使用v-bind进行如下绑定操作 --><img v-bind:src="imgSrc" alt="" width="150" height="150" /><br /><!-- v-bind关键字可以省略 --><img :src="imgSrc" alt="" width="150" height="150" /><br /><!-- title属性是鼠标放到图片后会显示的内容,可用+拼接:class中的语法意思为active这个自定义样式是否发挥作用取决于isActive属性--><img:src="imgSrc"alt="":title="imgTitle+'123'":class="{active:isActive}"@click="toggleActive"width="150"height="150"/></div><script src="../Resources/vue.js"></script><!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> --><script>var app = new Vue({el: "#app",data: {imgSrc: "../Resources/good.jpg",imgTitle: "v-bind测试",isActive: false,},methods: {toggleActive: function () {this.isActive = !this.isActive;},},});</script></body>
</html>

5.8 v-for
指令
v-for
指令的作用是:根据数据生成列表结构- 数组经常和
v-for
结合使用 - 语法是
( item,index ) in数据
item
和index
可以结合其他指令一起使用- 数组长度的更新会同步到页面上,是响应式的
<!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>Documents</title></head><body><div id="app"><ul><!-- arr是存放在data中的列表,it对于其中具体元素,index对于索引 --><!-- v-for会复制一整个组件,此处为复制 li 结构 --><li v-for="(it,index) in arr">一线城市{{index+1}}:{{it}}</li></ul><!-- v-for 也可以配合其他语法进行使用,可操作到具体元素 --><h2 v-for="item in meat" :title="item.name"><!-- map结构可以访问value -->{{item.name}}</h2></div><script src="../Resources/vue.js"></script><!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> --><script>var app = new Vue({el: "#app",data: {arr: ["北京", "上海", "广州", "深圳"],meat: [{ name: "牛肉" }, { name: "猪肉" }],},});</script></body>
</html>

5.9 v-model指令
v-model
指令的作用是便捷的设置s和获取表单元素的值- 绑定的数据会和表单元素值相关联
<!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>Documents</title></head><body><div id="app"><!-- text的内容与data中的message绑定 --><input type="text" v-model="message" /><h2>{{message}}</h2></div><script src="../Resources/vue.js"></script><!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> --><script>var app = new Vue({el: "#app",data: {message: "哈哈",},});</script></body>
</html>

6. Axios
axios
是一个专注于网络请求的库
<!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>Documents</title></head><body><div id="app"><input type="button" value="获取笑话" @click="getJoke" /><br><h3>{{joke}}</h3></div><script src="../Resources/vue.js"></script><script src="../Resources/axios.js"></script><!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> --><script>var app = new Vue({el: "#app",data: {joke: "很好笑的笑话",},methods: {getJoke: function () {var that = this;// 向网站发送get请求【当然也有post请求,主要看接口要求】// then之后第一个function用来处理请求成功的情况,// 第2个function用来处理请求失败的情况axios.get("https://autumnfish.cn/api/joke").then(function (response) {// 在axios中this不再指向Vue对象,因此若要使用需要提前存储变量// response.data即从网站中获取的数据,不过需要哪部分数据还是得看网页数据得组成结构【类似于json,也可在Chrom利用F12查看】that.joke=response.data},function (err) {});},},});</script></body>
</html>
