Vue详细笔记
Vue实战
1. Vue 引言
渐进式
JavaScript 框架 —摘自官网
1 2 3 4 5 6 7 8 9 10 11 12
| # 渐进式 1. 易用 html css javascript 2. 高效 开发前端页面 非常高效 3. 灵活 开发灵活 多样性 # 总结 Vue 是一个javascript 框架 # 后端服务端开发人员: Vue 渐进式javascript框架: 让我们通过操作很少的DOM,甚至不需要操作页面中任何DOM元素,就很容易的完成数据和视图绑定 双向绑定 MVVM 注意: 日后在使用Vue过程中页面中不要在引入Jquery框架 htmlcss--->javascript ----->jquery---->angularjs -----> Vue # Vue 作者 尤雨溪 国内的
|
2. Vue入门
2.1 下载Vuejs
1 2 3 4 5 6
| <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 生产环境版本,优化了尺寸和速度 --> <script src="https://cdn.jsdelivr.net/npm/vue"></script>
|
2.2 Vue第一个入门应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <div id="app"> { { msg }} { {username}} { {pwd}} <br> <span> { { username }} <h1>{ { msg }}</h1> </span> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ msg:"haust欢迎你,期待你的加入!", username:"hello Vue!", pwd :"12345", }, }); </script>
|
1 2 3 4 5 6 7 8
| # 总结: 1.vue实例(对象)中el属性: 代表Vue的作用范围 日后在Vue的作用范围内都可以使用Vue的语法 2.vue实例(对象)中data属性: 用来给Vue实例绑定一些相关数据, 绑定的数据可以通过{ {变量名}}在Vue作用范围内取出 3.在使用{ {}}进行获取data中数据时,可以在{ {}}中书写表达式,运算符,调用相关方法,以及逻辑运算等 4.el属性中可以书写任意的CSS选择器[jquery选择器],但是在使用Vue开发是推荐使用 id选择器
|
3. v-text和v-html
3.1 v-text
v-text
:用来获取data中数据将数据以文本的形式渲染到指定标签内部 类似于javascript 中 innerText
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <div id="app" class="aa"> <span >{ { message }}</span> <span v-text="message"></span> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ message:"haust欢迎您" } }) </script>
|
1 2 3 4 5
| # 总结 1.{ {}}(插值表达式)和v-text获取数据的区别在于 a.使用v-text取值会将标签中原有的数据覆盖 使用插值表达式的形式不会覆盖标签原有的数据 b.使用v-text可以避免在网络环境较差的情况下出现插值闪烁
|
3.2 v-html
v-html
:用来获取data中数据将数据中含有的html标签先解析在渲染到指定标签的内部 类似于javascript中 innerHTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <div id="app" class="aa"> <span>{ {message}}</span> <br> <span v-text="message"></span> <br> <span v-html="message">xxxxxx</span> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ message:"<a href=''>百知欢迎您</a>" } }) </script>
|
4.vue中事件绑定(v-on)
4.1 绑定事件基本语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <div id="app"> <h2>{ {message}}</h2> <h2 v-text="message"></h2> <h2>年龄:{ { age }}</h2> <br> <input type="button" value="点我改变年龄" v-on:click="changeage"> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ message:"hello 欢迎来到百知课堂!", age:23, }, methods:{ changeage:function(){ alert('点击触发'); } } }) </script>
|
1 2 3 4 5 6
| # 总结: 事件 事件源:发生事件dom元素 事件: 发生特定的动作 click.... 监听器 发生特定动作之后的事件处理程序 通常是js中函数 1.在vue中绑定事件是通过v-on指令来完成的 v-on:事件名 如 v-on:click 2.在v-on:事件名的赋值语句中是当前时间触发调用的函数名 3.在vue中事件的函数统一定义在Vue实例的methods属性中 4.在vue定义的事件中this指的就是当前的Vue实例,日后可以在事件中通过使用this获取Vue实例中相关数据
|
4.2 Vue中事件的简化语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <div id="app"> <h2>{ { age }}</h2> <input type="button" value="通过v-on事件修改年龄每次+1" v-on:click="changeage"> <input type="button" value="通过@绑定时间修改年龄每次-1" @click="editage"> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ age:23, }, methods:{ changeage:function(){ this.age++; }, editage:function(){ this.age--; } } }); </script>
|
1 2
| # 总结: 1.日后在vue中绑定事件时可以通过@符号形式 简化 v-on 的事件绑定
|
4.3 Vue事件函数两种写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <div id="app"> <h2>{ { age }}</h2> <input type="button" value="通过v-on事件修改年龄每次+1" v-on:click="changeage"> <input type="button" value="通过@绑定时间修改年龄每次-1" @click="editage"> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ age:23, }, methods:{ changeage:function(){ this.age++; }, editage:function(){ this.age--; } } }); </script>
|
1 2
| # 总结: 1.在Vue中事件定义存在两种写法 一种是 函数名:function(){} 一种是函数名:(){}
|
4.4 Vue事件参数传递
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <div id="app"> <span>{ {count}}</span> <input type="button" value="改变count为指定的值" @click="changecount(23,'xiaohei')"> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ count:1, }, methods:{ changecount(count,name){ this.count = count; alert(name); } } }); </script>
|
1 2
| # 总结: 1.在使用事件时,可以直接在事件调用出给事件进行参数传递,在事件定义出通过定义对应变量接收传递的参数
|
5.v-show v-if v-bind
5.1 v-show
v-show
:用来控制页面中某个标签元素是否展示 底层使用控制是 display 属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <div id="app"> <!-- v-show: 用来控制标签展示还是隐藏的 --> <h2 v-show="false">百知教育欢迎你的加入!</h2> <h2 v-show="show">百知教育欢迎你的加入这是vue中定义变量true!</h2> <input type="button" value="展示隐藏标签" @click="showmsg"> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ show:false, }, methods:{ showmsg(){ this.show = !this.show; } } }) </script>
|
1 2 3
| # 总结 1.在使用v-show时可以直接书写boolean值控制元素展示,也可以通过变量控制标签展示和隐藏 2.在v-show中可以通过boolean表达式控制标签的展示课隐藏
|
5.2 v-if
v-if
: 用来控制页面元素是否展示 底层控制是DOM元素 操作DOM
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <div id="app"> <h2 v-if="false">百知教育</h2> <h2 v-if="show">百知教育欢迎你的加入</h2> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ show:false }, methods:{ } }); </script>
|
5.3 v-bind
v-bind
: 用来绑定标签的属性从而通过vue动态修改标签的属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <div id="app"> <img width="300" v-bind:title="msg" v-bind:class="{aa:showCss}" src="baizhilogo.jpg" alt=""> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ msg:"csp!!!!", showCss:true, }, methods:{ } }) </script>
|
5.4 v-bind 简化写法
vue为了方便我们日后绑定标签的属性提供了对属性绑定的简化写法如 v-bind:属性名
简化之后 :属性名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <div id="app"> <img width="300" :title="msg" :class="{aa:showCss}" :src="src" alt=""> <input type="button" value="动态控制加入样式" @click="addCss"> <input type="button" value="改变图片" @click="changeSrc"> </div> <!--引入vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el:"#app", data:{ msg:"hello", showCss:true, src:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1583490365568&di=52a82bd614cd4030f97ada9441bb2d0e&imgtype=0&src=http%3A%2F%2Fimg.kanzhun.com%2Fimages%2Flogo%2F20160714%2F820a68f65b4e4a3634085055779c000c.jpg" }, methods:{ addCss(){ this.showCss= !this.showCss; }, changeSrc(){ this.src = "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1925088662,1336364220&fm=26&gp=0.jpg"; } } }) </script>
|
6.v-for的使用
v-for
: 作用就是用来对对象进行遍历的(数组也是对象的一种)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| <div id="app"> <span>{ { user.name }} { { user.age }}</span> <br> <!-- 通过v-for遍历对象 --> <span v-for="(value,key,index) in user"> { {index}} : { {key}} : { {value}} </span> <!-- 通过v-for遍历数组 --> <ul> <li v-for="a,index in arr" > { {index}} { {a}} </li> </ul> <!-- 通过v-for遍历数组中对象 :key 便于vue内部做重用和排序 --> <ul> <li v-for="user,index in users" :key="user.id"> { {index+1}} { { user.name }} === { { user.age }} ==== { { user.content }} </li> </ul> </div> <!--引入vue--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el: "#app", data: { user:{ name:"csp",age:22}, arr:["西苑校区", "开元校区", "河科大"], users:[ { id:"1",name:"csp",age:23,content:"我还是哪个充钱的少年!"}, { id:"2",name:"java小白",age:23,content:"没有一丝丝改变!"}, ] }, methods: { } }); </script>
|
7 .v-model 双向绑定
v-model
: 作用用来绑定标签元素的值与vue实例对象中data数据保持一致,从而实现双向的数据绑定机制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <div id="app"> <input type="text" v-model="message"> <span>{ {message}}</span> <hr> <input type="button" value="改变Data中值" @click="changeValue"> </div> <!--引入vue--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el: "#app", data: { message:"" }, methods: { changeValue(){ this.message='hello!'; } } }); </script>
|
1 2 3 4 5 6 7 8
| # 总结 1.使用v-model指令可以实现数据的双向绑定 2.所谓双向绑定 表单中数据变化导致vue实例data数据变化 vue实例中data数据的变化导致表单中数据变化 称之为双向绑定 # MVVM架构 双向绑定机制 Model: 数据 Vue实例中绑定数据 VM: ViewModel 监听器 View: 页面 页面展示的数据
|
8. 事件修饰符
修饰符
: 作用用来和事件连用,用来决定事件触发条件或者是阻止事件的触发机制
1 2 3 4 5 6 7
| # 1.常用的事件修饰符 .stop .prevent .capture .self .once .passive
|
8.1 stop事件修饰符
用来阻止事件冒泡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <div id="app"> <div class="aa" @click="divClick"> <input type="button" value="按钮" @click.stop="btnClick"> </div> </div> <!--引入vue--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const app = new Vue({ el: "#app", data: { }, methods: { btnClick(){ alert('button被点击了'); }, divClick(){ alert('div被点击了'); } } }); </script>
|
8.2 prevent 事件修饰符
用来阻止标签的默认行为
1 2
| <!--用来阻止事件的默认行为--> <a href="http://www.baizhibest.com/" @click.prevent="aClick">Hello World</a>
|
8.3 self 事件修饰符
用来针对于当前标签的事件触发 ===========> 只触发自己标签的上特定动作的事件 只关心自己标签上触发的事件 不监听事件冒泡
1 2 3 4 5 6
| <!--只触发标签自身的事件--> <div class="aa" @click.self="divClick"> <!--用来阻止事件冒泡--> <input type="button" value="按钮" @click.stop="btnClick"> <input type="button" value="按钮1" @click="btnClick1"> </div>
|
8.4 once 事件修饰符
once 一次 作用: 就是让指定事件只触发一次
1 2 3 4 5
| <!-- .prevent : 用来阻止事件的默认行为 .once : 用来只执行一次特定的事件 --> <a href="http://www.baizhibest.com/" @click.prevent.once="aClick">Hello World</a>
|
9. 按键修饰符
作用: 用来与键盘中按键事件绑定在一起,用来修饰特定的按键事件的修饰符
1 2 3 4 5 6 7 8 9 10
| # 按键修饰符 .enter .tab .delete (捕获“删除”和“退格”键) .esc .space .up .down .left .right
|
9.1 enter 回车键
用来在触发回车按键之后触发的事件
1
| <input type="text" v-model="msg" @keyup.enter="keyups">
|
9.2 tab 键
用来捕获到tab键执行到当前标签是才会触发
1
| <input type="text" @keyup.tab="keytabs">
|
10. Axios 基本使用
10.1 引言
Axios
是一个异步请求技术,核心作用就是用来在页面中发送异步请求,并获取对应数据在页面中渲染 页面局部更新技术 Ajax
10.2 Axios 第一个程序
中文网站:https://www.kancloud.cn/yunye/axios/234845
安装: https://unpkg.com/axios/dist/axios.min.js
10.2.1 GET方式的请求
1 2 3 4 5 6
| axios.get("http://localhost:8989/user/findAll?name=xiaochen").then(function(response){ console.log(response.data); }).catch(function(err){ console.log(err); });
|
10.2.2 POST方式请求
1 2 3 4 5 6 7 8 9 10 11
| axios.post("http://localhost:8989/user/save",{ username:"xiaochen", age:23, email:"xiaochen@zparkhr.com", phone:13260426185 }).then(function(response){ console.log(response.data); }).catch(function(err){ console.log(err); });
|
10.2.3 axios并发请求
并发请求
: 将多个请求在同一时刻发送到后端服务接口,最后在集中处理每个请求的响应结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| function findAll(){ return axios.get("http://localhost:8989/user/findAll?name=csp"); } function save(){ return axios.post("http://localhost:8989/user/save",{ username:"csp", age:22, email:"1165680007@qq.com", phone:13260426185 }); } axios.all([findAll(),save()]).then( axios.spread(function(res1,res2){ console.log(res1.data); console.log(res2.data); }) );
|
11. Vue 生命周期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| # Vue生命周期总结 1.初始化阶段 beforeCreate(){ console.log("beforeCreate: "+this.msg); }, created(){ console.log("created: "+this.msg); }, beforeMount(){ console.log("beforeMount: "+document.getElementById("sp").innerText); }, mounted(){ console.log("Mounted: "+document.getElementById("sp").innerText); } 2.运行阶段 beforeUpdate(){ console.log("beforeUpdate:"+this.msg); console.log("beforeUpdate:"+document.getElementById("sp").innerText); }, updated(){ console.log("updated:"+this.msg); console.log("updated:"+document.getElementById("sp").innerText); }, 3.销毁阶段 beforeDestory(){ }, destoryed(){ }
|
12. Vue中组件(Component)
12.1 组件作用
组件作用: 用来减少Vue实例对象中代码量,日后在使用Vue开发过程中,可以根据 不能业务功能将页面中划分不同的多个组件,然后由多个组件去完成整个页面的布局,便于日后使用Vue进行开发时页面管理,方便开发人员维护。
12.2 组件使用
12.2.1 全局组件注册
1 2 3 4 5 6
| Vue.component('login',{ template:'<div><h1>用户登录</h1></div>' });
<login></login>
|
1 2 3 4
| # 注意: 1.Vue.component用来开发全局组件 参数1: 组件的名称 参数2: 组件配置{} template:''用来书写组件的html代码 template中必须有且只有一个root元素 2.使用时需要在Vue的作用范围内根据组件名使用全局组件 3.如果在注册组件过程中使用 驼峰命名组件的方式 在使用组件时 必须将驼峰的所有单词小写加入-线进行使用
|
12.2.2 局部组件注册
1
| 说明:通过将组件注册给对应Vue实例中一个components属性来完成组件注册,这种方式不会对Vue实例造成累加
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| let login ={ template:'<div><h2>用户登录</h2></div>' }; const app = new Vue({ el: "#app", data: { }, methods: { }, components:{ login:login } }); <login></login>
|
第二种开发方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <template id="loginTemplate"> <h1>用户登录</h1> </template>
let login ={ template:'#loginTemplate' };
const app = new Vue({ el: "#app", data: { }, methods: { }, components:{ login:login } }); <login></login>
|
12.3 Prop的使用
1
| 作用:props用来给组件传递相应静态数据或者是动态数据的
|
12.3.1 通过在组件上声明静态数据传递给组件内部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| let login = { template:"<div><h1>欢迎:{ { userName }} 年龄:{ { age }}</h1></div>", props:['userName','age'] }
const app = new Vue({ el: "#app", data: { }, methods: { }, components:{ login } });
<login user-name="csp" age="22"></login>
|
1 2 3 4
| # 总结: 1.使用组件时可以在组件上定义多个属性以及对应数据 2.在组件内部可以使用props数组生命多个定义在组件上的属性名 日后可以在组件中通过{ { 属性名 }} 方式获取组件中属性值
|
12.3.2 通过在组件上声明动态数据传递给组件内部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const login = { template:'<div><h2>欢迎: { { name }} 年龄:{ { age }}</h2></div>', props:['name','age'] }
const app = new Vue({ el: "#app", data: { username:"csp", age:22 }, methods: { }, components:{ login } });
<login :name="username" :age="age"></login>
|
12.3.3 prop的单向数据流
1
| 单向数据流:所有的 prop 都使得其父子 prop 之间形成了一个**单向下行绑定**:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。
|
所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。
额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。—摘自官网
12.4 组件中定义数据和事件使用
1. 组件中定义属于组件的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const login = { template:'<div><h1>{ { msg }} Hello World</h1><ul><li v-for="item,index in lists">{ { index }}{ { item }}</li></ul></div>', data(){ return { msg:"hello", lists:['java','spring','springboot'] } } }
|
2.组件中事件定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const login={ template:'<div><input type="button" value="点我触发组件中事件" @click="change"></div>', data(){ return { name:'csp' }; }, methods:{ change(){ alert(this.name) alert('触发事件'); } } }
|
1 2 3
| # 总结 1.组件中定义事件和直接在Vue中定义事件基本一致 直接在组件内部对应的html代码上加入@事件名=函数名方式即可 2.在组件内部使用methods属性用来定义对应的事件函数即可,事件函数中this 指向的是当前组件的实例
|
12.5 向子组件中传递事件并在子组件中调用改事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| const login = { template:"<div><h1>Hello World { { uname }}</h1> <input type='button' value='点我' @click='change'></div>", data(){ return { uname:this.name } }, props:['name'], methods:{ change(){ this.$emit('aaa'); } } } const app = new Vue({ el: "#app", data: { username:"csp" }, methods: { findAll(){ alert('Vue 实例中定义函数'); } }, components:{ login, } });
<login @find="findAll"></login>
|
13.Vue中路由(VueRouter)
13.1 路由
1
| 路由:根据请求的路径按照一定的路由规则进行请求的转发从而帮助我们实现统一请求的管理
|
13.2 作用
13.3 使用路由
引入路由
1 2
| <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
|
创建组件对象
1 2 3 4 5 6 7
| const login = { template:'<h1>登录</h1>' }; const register = { template:'<h1>注册</h1>' };
|
定义路由对象的规则
1 2 3 4 5 6 7 8 9
| const router = new VueRouter({ routes:[ { path:'/login',component:login}, { path:'/register',component:register} ] });
|
将路由对象注册到vue实例
1 2 3 4 5 6 7 8 9
| const app = new Vue({ el: "#app", data: { username:"csp", }, methods: { }, router:router });
|
在页面中显示路由的组件
1 2
| <!--显示路由的组件--> <router-view></router-view>
|
根据连接切换路由
1 2
| <a href="#/login">点我登录</a> <a href="#/register">点我注册</a>
|
13.4 router-link使用
1 2 3 4 5 6 7 8 9 10 11
| const router = new VueRouter({ routes:[ { path:'/',redirect:'/login'}, { path:'/login', component:login}, { path:'/register', component:register}, ] });
|
13.5 默认路由
1 2
| 作用:用来在第一次进入界面是显示一个默认的组件 const router = new VueRouter({ routes:[
|
13.6 路由中参数传递
通过?号形式拼接参数
1
| <router-link to="/login?id=21&name=zhangsan">我要登录</router-link>
|
组件中获取参数
1 2 3 4 5 6 7 8 9 10 11
| const login = { template:'<h1>用户登录</h1>', data(){ return { }}, methods:{ }, created(){ console.log("=============>"+this.$route.query.id+"======>"+this.$route.query.name); } };
|
通过使用路径方式传递参数
1 2 3 4 5 6 7
| <router-link to="/register/24/csp">我要注册</router-link> var router = new VueRouter({ routes:[ { path:'/register/:id/:name',component:register} ] });
|
组件中获取参数
1 2 3 4 5 6 7
| const register = { template:'<h1>用户注册{ { $route.params.name }}</h1>', created(){ console.log("注册组件中id: "+this.$route.params.id+this.$route.params.name); } };
|
13.7 嵌套路由
声明最外层和内层路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <template id="product"> <div> <h1>商品管理</h1> <router-link to="/product/add">商品添加</router-link> <router-link to="/product/edit">商品编辑</router-link> <router-view></router-view> </div> </template>
const product={ template:'#product' }; const add = { template:'<h4>商品添加</h4>' }; const edit = { template:'<h4>商品编辑</h4>' };
|
创建路由对象含有嵌套路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const router = new VueRouter({ routes:[ { path:'/product', component:product, children:[ { path:'add',component: add}, { path:'edit',component: edit}, ] }, ] });
|
注册路由对象
1 2 3 4 5 6 7 8
| const app = new Vue({ el: "#app", data: { }, methods: { }, router, });
|
测试路由
1 2
| <router-link to="/product">商品管理</router-link> <router-view></router-view>
|
14. Vue CLI 脚手架
14.1 什么是CLI
命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)
14.2 什么是Vue CLI
Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。使用Vue 脚手架之后我们开发的页面将是一个完整系统(项目)。
14.3 Vue CLI优势
- 通过
vue-cli
搭建交互式的项目脚手架。bootstrap css js jquery js 通过执行命令方式下载相关依赖
- 通过
@vue/cli
+ @vue/cli-service-global
快速开始零配置原型开发 vue页面 vuejs vuerouter axios(一条命令)
- 一个运行时依赖 (
@vue/cli-service
),该依赖:
- 可升级; 一条命令
- 基于 webpack 构建,并带有合理的默认配置; webpack 项目打包方式 编译好的项目源码===>部署到服务器上直接使用
- 可以通过项目内的配置文件进行配置; 默认配置文件,通过修改默认配置文件达到自己想要的项目环境
- 可以通过插件进行扩展。 vue v-charts elementui
- 一个丰富的官方插件集合,集成了前端生态中最好的工具。Nodejs(tomcat) Vue VueRouter webpack yarn
- 一套完全图形化的创建和管理 Vue.js 项目的用户界面
14.4 Vue CLI安装
1. 环境准备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #1.下载nodejs http: windows系统: .msi 安装包(exe)指定安装位置 .zip(压缩包)直接解压缩指定目录 mac os 系统: .pkg 安装包格式自动配置环境变量 .tar.gz(压缩包)解压缩安装到指定名 #2.配置nodejs环境变量 windows系统: 1.计算上右键属性----> 高级属性 ---->环境变量 添加如下配置: NODE_HOME= nodejs安装目录 PATH = xxxx;%NODE_HOME% 2.macos 系统 推荐使用.pkg安装直接配置node环境 #3.验证nodejs环境是否成功 node -v #4.npm介绍 node package mangager nodejs包管理工具 前端主流技术 npm 进行统一管理 maven 管理java后端依赖 远程仓库(中心仓库) 阿里云镜像 npm 管理前端系统依赖 远程仓库(中心仓库) 配置淘宝镜像 #5.配置淘宝镜像 npm config set registry https: npm config get registry #6.配置npm下载依赖位置 windows: npm config set cache "D:\nodereps\npm-cache" npm config set prefix "D:\nodereps\npm_global" mac os: npm config set cache "/Users/chenyannan/dev/nodereps" npm config set prefix "/Users/chenyannan/dev/nodereps" #7.验证nodejs环境配置 npm config ls ; userconfig /Users/chenyannan/.npmrc cache = "/Users/chenyannan/dev/nodereps" prefix = "/Users/chenyannan/dev/nodereps" registry = "https://registry.npm.taobao.org/"
|
2.安装脚手架
1 2 3 4 5 6 7
| #0.卸载脚手架 npm uninstall -g @vue/cli npm uninstall -g vue-cli #1.Vue Cli官方网站 https: #2.安装vue Cli npm install -g vue-cli
|
3.第一个vue脚手架项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| # 1.创建vue脚手架第一个项目 vue init webpack 项目名 # 2.创建第一个项目 hello ------------->项目名 -build ------------->用来使用webpack打包使用build依赖 -config ------------->用来做整个项目配置目录 -node_modules ------>用来管理项目中使用依赖 -src ------>用来书写vue的源代码[重点] +assets ------>用来存放静态资源 [重点] components ------>用来书写Vue组件 [重点] router ------>用来配置项目中路由[重点] App.vue ------>项目中根组件[重点] main.js ------>项目中主入口[重点] -static ------>其它静态 -.babelrc ------> 将es6语法转为es5运行 -.editorconfig ------> 项目编辑配置 -.gitignore ------> git版本控制忽略文件 -.postcssrc.js ------> 源码相关js -index.html ------> 项目主页 -package.json ------> 类似与pom.xml 依赖管理 jquery 不建议手动修改 -package-lock.json ----> 对package.json加锁 -README.md ----> 项目说明文件 # 3.如何运行在项目的根目录中执行 npm start 运行前端系统 # 4.如何访问项目 http: # 5.Vue Cli中项目开发方式 注意: 一切皆组件 一个组件中 js代码 html代码 css样式 1. VueCli开发方式是在项目中开发一个一个组件对应一个业务功能模块,日后可以将多个组件组合到一起形成一个前端系统 2. 日后在使用vue Cli进行开发时不再书写html,编写的是一个个组件(组件后缀.vue结尾的文件),日后打包时vue cli会将组件编译成运行的html文件
|
4.如何开发Vue脚手架
15.在脚手架中使用axios
15.1 安装axios
1 2 3 4 5 6 7 8
| # 1.安装axios npm install axios --save-dev npm install vue # 2.配置main.js中引入axios import axios from 'axios'; Vue.prototype.$http=axios; # 3.使用axios 在需要发送异步请求的位置:this.$http.get("url").then((res)=>{}) this.$http.post("url").then((res)=>{})
|
16.Vue Cli脚手架项目打包和部署
1 2 3 4 5 6
| # 1.在项目根目录中执行如下命令: vue run build 注意:vue脚手架打包的项目必须在服务器上运行不能直接双击运行 # 2.打包之后当前项目中变化 在打包之后项目中出现dist目录,dist目录就是vue脚手架项目生产目录或者说是直接部署目录 # 3.
|