Vue
2021-04-04 00:44:53 72 举报
AI智能生成
请大家不要直接克隆,着手梳理一遍才会变成自己的知识
作者其他创作
大纲/内容
什么是VUE
作者:尤雨溪
Vue是用于构建用户界面的渐进式框架
Vue 只关注视图层, 采用自底向上增量开发的设计
优势
1、集成了模块化
这是Angular的特性
2、结合了虚拟dom<br>
这是react的特性
3、支持双向绑定
v-model
4、Vue是MVVM的具体应用
引入Vue和axios
Vue
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script><br></pre>
axios
axios是Vue推荐的通信框架,不推荐使用jQuery是因为jQuery对dom操作太频繁了,影响效率
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><script src="https://unpkg.com/axios/dist/axios.min.js"></script><br></pre>
推荐在mounted的钩子函数里写
计算属性<br>
节省计算开销,计算属性在内存中运行
conputed属性中写<br>
当计算缓存被修改会重新计算
⭐插槽(slot)
Vue支持热拔插
示例
1、插槽结构
introduce
self
family
2、插槽定义
introduce
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"> Vue.component("introduce",{<br> template :'<div>' +<br> '<slot name="self"></slot>' +<br> '<slot name="family"></slot>' +<br> '</div>'<br> })<br></pre>
self
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"> Vue.component("self",{<br> props:['name'],<br> template : '<p>{{name}}</p>'<br> })<br></pre>
family
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"> Vue.component("family",{<br> props:['family'],<br> template : '<ul>' +<br> '<li>{{family.name}}</li>' +<br> '</ul>'<br> })<br></pre>
3、插槽使用
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"> <div id="app"><br> <introduce slot="introduce"><br> <self slot="self" :name="admin.name"></self><br> <family slot="family" v-for="family in admin.families" :family="family"></family><br> </introduce><br> </div><br></pre>
4、对应关系
1、introduce里的两个插槽分别对应下面的self和family
template内嵌套插槽需要用name属性绑定子插槽
2、插槽定义有值传递的时候,需要用props接受参数
3、插槽使用的时候,子插槽需要绑定插槽名称
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#a9b7c6"><self </font><b style=""><font color="#f15a23">slot="self"</font></b><font color="#a9b7c6"> :name="admin.name"></self><br></font></pre>
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#a9b7c6"><family </font><b style=""><font color="#f15a23">slot="family"</font></b><font color="#a9b7c6"> v-for="family in admin.families" :family="family"></family><br></font></pre>
4、插槽有参数使用的时候,需要通过v-bind:绑定参数(也可以直接:,省略掉v-bind)<br>绑定的参数和插槽定义时的props内属性对应
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#a9b7c6"> Vue.component("self",{<br> </font><b style=""><font color="#fdb813">props:['name']</font></b><font color="#a9b7c6">,<br> template : '<p>{{name}}</p>'<br> })<br></font></pre>
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#a9b7c6"><self slot="self" </font><b style=""><font color="#fdb813">:name="admin.name"</font></b><font color="#a9b7c6">></self><br></font></pre>
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#a9b7c6"> Vue.component("family",{<br> </font><font color="#fdb813"><b style="">props:['family'],</b><br></font><font color="#a9b7c6"> template : '<ul>' +<br> '<li>{{family.name}}</li>' +<br> '</ul>'<br> })<br></font></pre>
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#a9b7c6"><family slot="family" v-for="family in admin.families" </font><font color="#fdb813"><b style="">:family="family</b>"</font><span style="color: rgb(169, 183, 198);">></family><br></span></pre>
事件分发
Vue组件无法直接调用到Vue实例的方法,需要通过this.$emit('自定义事件名',方法参数)来调用
1、组件编写触发向Vue实例传递index的函数方法
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"> <font color="#cfd0d2">props:['family','</font><b style=""><font color="#f384ae">index</font></b><font color="#cfd0d2">'],<br> template : '<ul>' +<br> '<li>{{index}}---{{family.name}} <button @click="removeSelf(index)">删除</button></li>' +<br> '</ul>',</font><font color="#a9b7c6"><br> methods: {<br> </font><b style=""><font color="#fdb813">removeSelf</font></b><font color="#a9b7c6">:function (</font><b style=""><font color="#f384ae">index</font></b><font color="#a9b7c6">){<br> </font><b style=""><font color="#99ffff">this.$emit</font></b><font color="#a9b7c6">('</font><b style=""><font color="#f15a23">remove</font></b><font color="#a9b7c6">',</font><b style=""><font color="#f384ae">index</font></b><font color="#a9b7c6">); <br> }<br> }<br></font></pre><br>
2、组件绑定事件触发条件
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#a9b7c6"> template : '<ul>' +<br> '<li>{{index}}---{{family.name}} <button </font><b style=""><font color="#16884a">@click</font></b><font color="#a9b7c6">="</font><b style=""><font color="#fdb813">removeSelf</font></b><font color="#a9b7c6">(</font><b style=""><font color="#f384ae">index</font></b><font color="#a9b7c6">)">删除</button></li>' + <br> '</ul>',<br></font></pre>
3、组件填充时传递index
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#a9b7c6"><family slot="family" v-for="(family,</font><b style=""><font color="#f384ae">index</font></b><font color="#a9b7c6">) in admin.families" <br> :family="family" </font><b style=""><font color="#f384ae">:index="index"</font></b><font color="#a9b7c6"> <br> @</font><b style=""><font color="#f15a23">remove</font></b><font color="#a9b7c6">="</font><b style=""><font color="#662c90">removeFamily</font></b><font color="#a9b7c6">(</font><b style=""><font color="#f384ae">index</font></b><font color="#a9b7c6">)"><br></family> <br></font></pre>
4、Vue实例中编写事件函数
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">methods:{<br> </font><b style=""><font color="#662c90">removeFamily </font></b><font color="#cfd0d2">: function(</font><b style=""><font color="#f384ae">index</font></b><font color="#cfd0d2">){<br> this.admin.families.splice(</font><b style=""><font color="#f384ae">index</font></b><font color="#cfd0d2">,1);<br> }<br> }</font><font color="#a9b7c6"><br></font></pre>
文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><!DOCTYPE html><br><html lang="en"><br><head><br> <meta charset="UTF-8"><br> <title>VUE</title><br></head><br><body><br> <div id="app"><br> <introduce slot="introduce"><br> <self slot="self" :name="admin.name"></self><br> <family slot="family" v-for="(family,index) in admin.families"<br> :family="family" :index="index" @remove="removeFamily(index)"></family><br> </introduce><br> </div><br><br><script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script><br><script src="https://unpkg.com/axios/dist/axios.min.js"></script><br><script type="text/javascript"><br> Vue.component("introduce",{<br> template :'<div>' +<br> '<slot name="self"></slot>' +<br> '<slot name="family"></slot>' +<br> '</div>'<br> })<br> Vue.component("self",{<br> props:['name'],<br> template : '<p>{{name}}</p>'<br> })<br> Vue.component("family",{<br> props:['family','index'],<br> template : '<ul>' +<br> '<li>{{index}}---{{family.name}} <button @click="removeSelf(index)">删除</button></li>' +<br> '</ul>',<br> methods: {<br> removeSelf:function (index){<br> this.$emit('remove',index);<br> }<br> }<br> })<br> var vm = new Vue({<br> el:"#app",<br> data(){<br> return{<br> admin:null<br> }<br> },<br> mounted(){<br> axios.get('xiaoye.json').then(res=>(this.admin=res.data));<br> },<br> methods:{<br> removeFamily : function(index){<br> this.admin.families.splice(index,1);<br> }<br> }<br> })<br></script><br></body><br></html></font><font color="#a9b7c6"><br></font></pre>
vue-cli<br>
需要node.js的支持
官网下载直接安装就可以了
node.js会自己添加环境变量,不需要手动添加环境变量
npm install cnpm -g<br>
全局安装cnpm
cnpm是国内淘宝镜像,速度更快
安装vue-cli
cnpm install vue-cli -g
全局安装vue-cli
创建一个vue-cli项目
1、cmd进入目标目录
2、cmd输入vue init webpack 项目名
3、询问项目名称,直接回车,因为上面写过了
4、项目描述,直接回车<br>
5、项目作者,可以输入自己的昵称
6、运行时编译,选择第一个
7、各种配置,一路No下去,我们需要自己走一遍才能更加了解运行过程
8、项目已经初始化完成了
9、进入我们的新项目
cd 项目名
10、安装npm
npm install
如果出错了的话,它会提示你怎么做,你照着输入修复指令就可以了
11、打包启动测试
npm run dev
12、出现Done提示后,浏览器输入localhost:8080应该可以成功打开初始页面<br>
13、ctrl+c后输入y确定可以停止服务
webpack
介绍
热部署
打包用的,可以把es6的模块打包降级到es5,使得所有的浏览器都可以使用
目前很多浏览器只支持es5
安装webpack<br>
管理员运行cmd
npm install webpack -g
npm install webpack-cli -g
成功截图
可以手动查看版本
如果安装失败了,改用cnpm install webpack -g一般就可以成功了
简单学习如何使用webpack
1、新建一个文件夹,使用idea打开
2、新建modules文件夹
3、新建hello.js
export暴露js方法
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">//export暴露一个方法<br></font><b style=""><font color="#f15a23">exports</font></b><font color="#cfd0d2">.sayHi = function (){<br> document.write("<h1>hi!,xiaoye!</h1>")<br>}</font><font color="#a9b7c6"><br></font></pre>
4、新建main.js
require引入暴露的js,声明一个变量接受<br>
该变量可以像Java中的类一样通过点来调用js方法
文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">//require加载暴露的方法<br>var </font><b style=""><font color="#f384ae">hi </font></b><font color="#cfd0d2">= </font><font color="#f15a23"><b>require</b></font><font color="#cfd0d2">("./hello")<br></font><b style=""><font color="#f384ae">hi</font></b><font color="#cfd0d2">.sayHi();</font><font color="#a9b7c6"><br></font></pre>
5、新建webpack.config.js
配置打包参数
1、entry入口<br>
一般就是main.js
2、output输出<br>
新建bundle.js作为接收输出的js(官方规范命名)
文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><b style=""><font color="#c41230">module.exports</font></b><font color="#cfd0d2"> = {<br> </font><b style=""><font color="#55beed">entry</font></b><font color="#cfd0d2">:'</font><b style=""><font color="#f15a23">./modules/main.js</font></b><font color="#cfd0d2">',<br> </font><b style=""><font color="#31a8e0">output</font></b><font color="#cfd0d2">:{<br> </font><b style=""><font color="#31a8e0">filename</font></b><font color="#cfd0d2">:"</font><b style=""><font color="#f15a23">./js/bundle.js</font></b><font color="#cfd0d2">"<br> }<br>}</font><br></pre>
6、terminal输入webpack打包
打包成功会多一个dist文件夹,里面有一个js文件夹,js文件夹里面就是打包成功的bundle.js
7、新建html,引入bundle.js测试是否成功
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><script src="dist/js/bundle.js"></script></font><br></pre>
8、浏览器打开,显示hi!xiaoye!
⭐vue-router
⭐是<b><font color="#c41230">vue-router</font></b>,别少字母,写成vue-route就不对了
浪费了我一下午,淦!
1、安装vue-router
npm install vue-router --save-dev
失败就换cnpm
2、main.js导入VueRouter
import
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">import VueRouter from 'vue-router'</font><font color="#a9b7c6"><br></font></pre>
显示声明使用
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">//显示使用VueRouter<br>Vue.use(VueRoute)</font><br></pre>
文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">import Vue from 'vue'<br>import App from './App'<br></font><b style=""><font color="#f384ae">import VueRouter from 'vue-router' </font></b><font color="#cfd0d2"><br><br>Vue.config.productionTip = false<br><br></font><b style=""><font color="#f384ae">//显示使用VueRouter<br>Vue.use(VueRouter)</font></b><font color="#cfd0d2"><br><br>new Vue({<br> el: '#app',<br> components: { App },<br> template: '<App/>'<br>})</font><br></pre>
3、编写components组件
4、在router的index.js里面写路径
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">export default new VueRouter({<br> routes:[<br> </font><font color="#c41230"><b style="">{<br> path:"/content",<br> name:"</b>Content<b style="">",<br> component:Content<br> }</b><b style="">,</b></font><font color="#cfd0d2"><br> </font><b style=""><font color="#0076b3">{<br> path:"/personal",<br> name:"</font></b><b><font color="#0076b3">Personal</font></b><b style=""><font color="#0076b3">",<br> component:Personal<br> }</font></b><font color="#cfd0d2"><br> ]<br>})</font><br></pre>
5、在页面直接应用
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"> <</font><b style=""><font color="#00a650">router-link</font></b><font color="#cfd0d2"> </font><b style=""><font color="#f384ae">to="/content"</font></b><font color="#cfd0d2">>内容页</router-link><br> <</font><b style=""><font color="#16884a">router-link</font></b><font color="#cfd0d2"> </font><b style=""><font color="#f384ae">to="/personal"</font></b><font color="#cfd0d2">>个人页</router-link><br> <</font><b style=""><font color="#f1753f">router-view</font></b><font color="#cfd0d2">></router-view></font><br></pre>
vue+element
1、搭建项目
1、命令符进入目标盘,创建前端webpack项目
vue init webpack vue-element
2、确认项目、描述、作者、选择不自动安装相关配置
一路No下去
3、进入项目
cd vue-element
4、安装相关依赖
1、npm install vue-router -D
路由配置
2、npm i element-ui -S<br>
element-ui
3、cnpm install sass-loader node-sass -D<br>
sass-loader和node-sass加载器
sass是css预处理器
4、npm install
2、配置路由
1、创建router目录
2、router目录下创建index.js
3、编写index.js
1、import Vue
2、import VueRouter
3、显式声明使用路由<br>
Vue.user(VueRouter)
4、暴露路由对象
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><b style=""><font color="#fdb813">export default new VueRouter</font></b><font color="#cfd0d2">({<br> </font><b style=""><font color="#f384ae">routes</font></b><font color="#cfd0d2">:[<br> </font><font color="#c41230"><b style="">{<br> path:"/content",<br> name:"</b></font><b><font color="#c41230">Content</font></b><font color="#c41230"><b style="">",<br> component:Content<br> }</b><b style="">,</b></font><font color="#cfd0d2"><br> </font><b style=""><font color="#0076b3">{<br> path:"/personal",<br> name:"</font></b><b><font color="#0076b3">Personal</font></b><b style=""><font color="#0076b3">",<br> component:Personal<br> }</font></b><font color="#cfd0d2"><br> ]<br>})</font><br></pre>
4、main.js引用router
1、import router from "./router"
2、vue实例中配置路由
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">new Vue({<br> el: '#app',<br> </font><b style=""><font color="#f384ae">router</font></b><font color="#cfd0d2"><br>})</font><br></pre>
3、配置ElementUI
1、main.js中引入ElementUI
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">import ElementUI from 'element-ui'</font><br></pre>
2、main.js中引入预加载的css
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">import 'element-ui/lib/theme-chalk/index.css';</font><br></pre>
3、显示声明使用Element UI
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">Vue.use(ElementUI)</font><br></pre>
4、vue实例中配置render渲染
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">new Vue({<br> el: '#app',<br> router,<br> </font><b style=""><font color="#f15a23">render: h => h(App)</font></b><font color="#cfd0d2"><br>})</font><br></pre>
main.js文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">import Vue from 'vue'<br>import App from './App'<br>import router from './router'<br></font><b style=""><font color="#f1753f">import ElementUI from 'element-ui'<br>import 'element-ui/lib/theme-chalk/index.css';</font></b><font color="#cfd0d2"><br><br>Vue.config.productionTip = false<br><br></font><b style=""><font color="#f1753f">Vue.use(ElementUI)</font></b><font color="#cfd0d2"><br><br>new Vue({<br> el: '#app',<br> router,<br> </font><b style=""><font color="#f1753f">render: h => h(</font><font color="#0076b3">App</font><font color="#f1753f">) </font><font color="#0076b3">//这里的app的意思是给App渲染</font></b><font color="#cfd0d2"><br>})</font><br></pre>
4、编写两个页面模拟登录
1、main
文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><template><br> <div>我是首页</div><br></template><br><br><script><br>export default {<br> name: "Main"<br>}<br></script><br><br><style scoped><br><br></style></font><br></pre>
2、login
⭐登录成功跳转路由(编程式导航)
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><b style=""><font color="#f15a23">this.$router.push("/main");</font></b><br></pre>
文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><template><br> <div><br> <el-form ref="loginForm" :model="form" :rules="rules" label-width="80px" class="login-box"><br> <h3 class="login-title">欢迎登录</h3><br> <el-form-item label="账号" prop="username"><br> <el-input type="text" placeholder="请输入账号" v-model="form.username"/><br> </el-form-item><br> <el-form-item label="密码" prop="password"><br> <el-input type="password" placeholder="请输入密码" v-model="form.password"/><br> </el-form-item><br> <el-form-item><br> <el-button type="primary" v-on:click="onSubmit('loginForm')">登录</el-button><br> </el-form-item><br> </el-form><br><br> <el-dialog<br> title="温馨提示"<br> :visible.sync="dialogVisible"<br> width="30%"<br> :before-close="handleClose"><br> <span>请输入账号和密码</span><br> <span slot="footer" class="dialog-footer"><br> <el-button type="primary" @click="dialogVisible = false">确 定</el-button><br> </span><br> </el-dialog><br> </div><br></template><br><br><script><br>export default {<br>name: "Login"<br>}<br></script><br><br><br><br><script><br>export default {<br> name:"Login",<br> data(){<br> return {<br> form:{<br> username: '',<br> password: ''<br> },<br> //表单验证,需要再el-form-item 元素中增加prop属性<br> rules:{<br> username:[<br> {required:true,message:'账号不能为空',trigger:'blur'}<br> ],<br> password:[<br> {required: true,message: '密码不能为空',trigger:'blur'}<br> ]<br> },<br> //对话框显示和隐藏<br> dialogVisible:false<br> }<br> },<br> methods:{<br> onSubmit(formName) {<br> //为表单绑定验证功能<br> this.$refs[formName].validate((valid) =>{<br> if (valid){<br> //使用 vue-router路由到指定页面,该方式称之为编程式导航<br> this.$router.push("/main");<br> } else {<br> this.dialogVisible = true;<br> return false;<br> }<br> });<br> }<br> }<br>}<br></script><br><style lang="scss" scoped><br>.login-box{<br> border: 1px solid #DCDFE6;<br> width: 350px;<br> margin:180px auto;<br> padding:35px 35px 15px 35px;<br> border-radius: 5px;<br> -webkit-border-radius: 5px;<br> -moz-border-radius: 5px;<br> box-shadow:0 0 25px #909399;<br>}<br><br>.login-title{<br> text-align:center;<br> margin:0 auto 40px auto;<br> color:#303133;<br>}<br></style></font><br></pre>
⭐注意点
如果npm run dev失败可能是因为sass-loader版本过高,降级后npm install即可
1、node-sass : ^4.13.0
2、sass-loader : ^7.3.1
嵌套路由
1、创建新的页面
2、在router的index.js里配置路由
1、import
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">import Profile from "../pages/user/Profile";<br>import UserList from "../pages/user/UserList";</font><br></pre>
2、配置子路由
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">export default new VueRouter({<br> routes:[<br> {<br> path:"/main",<br> name:"Main",<br> component:Main,<br> </font><b style=""><font color="#f15a23">children:[<br> {<br> path:"/user/profile",<br> component:Profile<br> },<br> {<br> path:"/user/userlist",<br> component:UserList<br> }<br> ]</font></b><font color="#cfd0d2"><br> },<br> {<br> path:"/login",<br> name:"Login",<br> component:Login<br> }<br> ]<br>})</font><br></pre>
3、在Main.Vue页面模拟子路由嵌套<br>
文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><template><br> <el-container><br> <el-aside width="200px"><br> <el-menu :default-openeds="['1']"><br> <el-submenu index="1"><br> <template slot="title"><i class="el-icon-caret-right"></i>用户管理</template><br> <el-menu-item-group><br> <el-menu-item index="1-1"><br> </font><b style=""><font color="#f15a23"><router-link to="/user/profile">个人信息</router-link></font></b><font color="#cfd0d2"><br> </el-menu-item><br> <el-menu-item index="1-2"><br> </font><b style=""><font color="#f15a23"><router-link to="/user/userlist">用户列表</router-link></font></b><font color="#cfd0d2"><br> </el-menu-item><br> </el-menu-item-group><br> </el-submenu><br> <el-submenu index="2"><br> <template slot="title"><i class="el-icon-caret-right"></i>内容管理</template><br> <e1-menu-item-group><br> <el-menu-item index="2-1">分类管理</el-menu-item><br> <el-menu-item index="2-2">内容列表</el-menu-item><br> </e1-menu-item-group><br> </el-submenu><br> </el-menu><br> </el-aside><br> <el-container><br> <el-header style="text-align: right; font-size: 12px"><br> <el-dropdown><br> <i class="el-icon-setting" style="margin-right:15px"></i><br> <el-dropdown-menu slot="dropdown"><br> <el-dropdown-item>个人信息</el-dropdown-item><br> <el-dropdown-item>退出登录</el-dropdown-item><br> </el-dropdown-menu><br> </el-dropdown><br> </el-header><br> </font><b style=""><font color="#f15a23"><router-view></router-view></font></b><font color="#cfd0d2"><br> </el-container><br> </el-container><br></template><br><script><br>export default {<br> name: "Main"<br>}<br></script><br><br><style scoped lang="scss"><br>.el-header {<br> background-color: #048bd1;<br> color: #333;<br> line-height: 60px;<br>}<br><br>.el-aside {<br> color: #333;<br>}<br></style></font><br></pre>
参数传递和重定向
参数传递
第一种方式
1、父组件给参数
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><router-link </font><b style=""><font color="#f384ae">:to="{name:'Profile', params : { id ,sex }}"</font></b><font color="#cfd0d2">>个人信息</router-link></font><br></pre>
2、路由index.js对应
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"> {<br> path:"/main",<br> name:"Main",<br> component:Main,<br> children:[<br> {<br> path:"</font><b style=""><font color="#cfd0d2">/user/profile</font><font color="#f15a23">/:id/:sex</font></b><font color="#cfd0d2">",<br> component:Profile<br> },<br> {<br> path:"/user/userlist",<br> component:UserList<br> }<br> ]<br> }</font><br></pre>
3、子组件拿参数
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><p></font><b style=""><font color="#0076b3">{{ $route.params.id }}</font></b><font color="#cfd0d2"></p><br><p></font><font color="#0076b3"><b style="">{{ $route.params.sex }</b>}</font><font color="#cfd0d2"></p></font><br></pre>
第二种方式
1、父组件给参数
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><router-link </font><b style=""><font color="#f384ae">:to="{name:'Profile', params : { id ,sex }}"</font></b><font color="#cfd0d2">>个人信息</router-link></font><br></pre>
2、路由index.js对应
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"> {<br> path:"/main",<br> name:"Main",<br> component:Main,<br> children:[<br> {<br> path:"</font><b style=""><font color="#cfd0d2">/user/profile</font><font color="#f15a23">/:id/:sex</font></b><font color="#cfd0d2">",<br> component:Profile,<br></font> <b><font color="#f15a23">props:true</font></b><font color="#cfd0d2"><br> },<br> {<br> path:"/user/userlist",<br> component:UserList<br> }<br> ]<br> }</font><br></pre>
3、子组件拿参数
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><template><br> <div><br> <h1>个人信息</h1><br> <p></font><b style=""><font color="#fdb813">{{ id }}</font></b><font color="#cfd0d2"></p><br></font> <font color="#cfd0d2"> <p></font><b style=""><font color="#fdb813">{{ sex}}</font></b><font color="#cfd0d2"></p><br> </div><br></template><br><br><script><br>export default {<br> </font><b style=""><font color="#fdb813">props:['id','sex']</font></b><font color="#cfd0d2">,<br> name: "Profile"<br>}<br></script><br><br><style scoped><br><br></style></font><br></pre>
重定向
1、路由配置
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"> {<br> path: '/</font><b style=""><font color="#c41230">goHome</font></b><font color="#cfd0d2">',<br> </font><b style=""><font color="#f15a23">redirect</font></b><font color="#cfd0d2">:'/main'<br> }</font><br></pre>
2、视图引用
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><router-link to="/</font><b style=""><font color="#c41230">goHome</font></b><font color="#cfd0d2">">回到首页</router-link></font><br></pre>
3、404使用重定向实现
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">{<br> </font><b style=""><font color="#c41230">path: '*',</font></b><font color="#cfd0d2"><br> component:NotFound<br>}</font><br></pre>
拦截器
1、安装axios
1、npm安装
npm install --save vue-axios
2、main.js引入
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">import axios from 'axios'<br>import VueAxios from 'vue-axios'<br><br>Vue.use(VueAxios,axios)</font><br></pre>
2、编写进出前后的方法<br>
1、进入前
beforeRouteEnter
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">beforeRouteEnter:(to,from,next)=>{<br> console.log("进入个人信息前")<br> },</font><br></pre>
2、离开前
beforeRouteLeave
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2">beforeRouteLeave:(to,from,next)=>{<br> console.log("离开个人信息前")<br> },</font><br></pre>
3、实际参数
to
将要跳转的路径信息
from
跳转前的路径信息
next
路由控制参数
next()
跳入下一个页面
next('/path')<br>
指定跳入path路由
next (false)<br>
返回原来的页面
next(vm=>{ })<br>
仅在beforeRouteEnter可用,vm为组件实例
⭐Vue的生命周期<br>
请大家点击文字后方的链接移步至我的流程图,流程图理解配合下方代码文件动手验证效果更好
⭐请先在terminal终端中输入 npm install vue 安装vue!!不然是不会成功哒
源码文件
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><font color="#cfd0d2"><!DOCTYPE html><br><html lang="en"><br><head><br> <meta charset="UTF-8"><br> <meta http-equiv="X-UA-Compatible" content="IE=edge"><br> <meta name="viewport" content="width=device-width, initial-scale=1.0"><br> <title>Document</title><br></head><br><body><br> <div id="app"><br> <h1 id="h1">{{ msg }}</h1><br> <button @click="msg = 'bye~'">hi -> bye</button><br> </div><br><br><br> <script src="./node_modules/vue/dist/vue.js"></script><br> <script><br> var vm = new Vue({<br> el:'#app',<br> data:{<br> msg:'hi~'<br> },<br> methods:{<br> hello:function(){<br> console.log('你好啊');<br> }<br> },<br> beforeCreate(){<br> // console.log(this.msg)<br> // this.hello()<br> },<br> created(){<br> // console.log(this.msg)<br> // this.hello()<br> },<br> beforeMount(){<br> // console.log(document.getElementById('h1').innerHTML)<br> },<br> mounted(){<br> // console.log(document.getElementById('h1').innerHTML)<br> },<br> beforeUpdate(){<br> // console.log(document.getElementById('h1').innerHTML)<br> },<br> updated(){<br> console.log(document.getElementById('h1').innerHTML)<br> }<br> }) <br> </script><br></body><br></html></font><br></pre>
0 条评论
下一页