目录
什么是vue-cli
需要的环境
webpack使用
安装Webpack
vue-router路由
路由嵌套
参数传递
接收参数
组件重定向
路由模式与 404
什么是vue-cli
vue-cli官方提供的一个脚手架,用于快速生成一个vue的项目模板; ??预先定义好的目录结构及基础代码,就好比咱们在创建Maven项目时可以选择创建一个骨架项目,这个估计项目就是脚手架,我们的开发更加的快速;
需要的环境
需要注意的是vue-cli2不支持较高的node.js版本,我下的是12的版本
Node.js:http://nodejs.cn/download/ 安装就是无脑的下一步就好,安装在自己的环境目录下 Git:https://git-scm.com/doenloads 镜像:https://npm.taobao.org/mirrors/git-for-windows/
确认nodejs安装成功:
?安装vue-cli
npm install -g vue-cli
#测试是否安装成功#查看可以基于哪些模板创建vue应用程序,通常我们选择webpack
vue list
?第一个vue-cli应用程序
D:\Project\vue-study;
创建一个基于webpack模板的vue应用程序
#1、首先需要进入到对应的目录 cd D:\Project\vue-study
#2、这里的myvue是顶日名称,可以根据自己的需求起名
vue init webpack myvue
一路都选择no即可; ??说明:
Project name:项目名称,默认回车即可 Project description:项目描述,默认回车即可 Author:项目作者,默认回车即可 Install vue-router:是否安装vue-router,选择n不安装(后期需要再手动添加) Use ESLint to lint your code:是否使用ESLint做代码检查,选择n不安装(后期需要再手动添加) Set up unit tests:单元测试相关,选择n不安装(后期需要再手动添加) Setupe2etests with Nightwatch:单元测试相关,选择n不安装(后期需要再手动添加) Should we run npm install for you after the,project has been created:创建完成后直接初始化,选择n,我们手动执行;运行结果! 初始化并运行
cd myvue
npm install
npm run dev
webpack使用
安装Webpack
npm install webpack -g
npm install webpack-cli -g
测试安装成功
?直接运行webpack 命令打包
vue-router路由
安装路由
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter);
测试
1、先删除没有用的东西 2、components ?目录下存放我们自己编写的组件 3、定义一个Content.vue ?的组件
<template>
<div>
<h1>内容页</h1>
</div>
</template>
<script>
export default {
name:"Content"
}
</script>
定义一个Main.vue 组件
<template>
<div>
<h1>首页</h1>
</div>
</template>
<script>
export default {
name:"Main"
}
</script>
安装路由,在src目录下,新建一个文件夹:router ,专门存放路由,配置路由index.js,如下
import Vue from'vue'
//导入路由插件
import Router from 'vue-router'
//导入上面定义的组件
import Content from '../components/Content'
import Main from '../components/Main'
//安装路由
Vue.use(Router) ;
//配置路由
export default new Router({
routes:[
{
//路由路径
path:'/content',
//路由名称
name:'content',
//跳转到组件
component:Content
},{
//路由路径
path:'/main',
//路由名称
name:'main',
//跳转到组件
component:Main
}
]
});
在main.js 中配置路由
import Vue from 'vue'
import App from './App'
//导入上面创建的路由配置目录
import router from './router'//自动扫描里面的路由配置
//来关闭生产模式下给出的提示
Vue.config.productionTip = false;
new Vue({
el:"#app",
//配置路由
router,
components:{App},
template:'<App/>'
});
在App.vue 中使用路由
<template>
<div id="app">
<!--
router-link:默认会被渲染成一个<a>标签,to属性为指定链接
router-view:用于渲染路由匹配到的组件
-->
<router-link to="/">首页</router-link>
<router-link to="/content">内容</router-link>
<router-view></router-view>
</div>
</template>
<script>
export default{
name:'App'
}
</script>
<style></style>
路由嵌套
嵌套路由又称子路由,在实际应用中,通常由多层嵌套的组件组合而成。
{
path:"/about",
component:About,
children:[ //通过children配置子级路由
{
path:"news", //子级路由前面不能加/
component:News
},
{
path:"massages",
component:Massages
}
]
},
跳转(要写完整路径)
<router-link to="/about/news" active-class="active">News</router-link>
参数传递
第一种传递方式 1、 修改路由配置, 主要是router下的index.js中的 path 属性中增加了 :id 这样的占位符
<!--跳转并携带 query参数,to的字符串写法-->
<router-link :to="`/about/massages/detail?id=${m.id}&msg=${m.msg}`">{{m.msg}}</router-link>
接收参数
$route.query.id
2、第二种传递方式 ?使用props 减少耦合
<!--跳转并携带 query参数,to的对象写法-->
<router-link :to="{
path:'/about/massages/detail',
query:{
id: m.id,
msg: m.msg
}
}">
{{m.msg}}
</router-link>
接收参数
$route.query.msg
组件重定向
重定向的意思是本来访问的是urlA的服务器,但由于web迁移,web服务器的地址发生了变化,我们在搜索引擎中配置,当访问该域名时,转发到另一个域名当前服务器的绑定域名,这叫重定向。
但 Vue 中的重定向是作用在路径不同但组件相同的情况下,比如: 在router下面index.js的配置
{
path: '/main',
name: 'Main',
component: Main
},
{
path: '/goHome',
redirect: '/main'
}
说明:这里定义了两个路径,一个是 /main ,一个是 /goHome,其中 /goHome 重定向到了 /main 路径,由此可以看出重定向不需要定义组件;
使用的话,只需要在Main.vue设置对应路径即可;
<el-menu-item index="1-3">
<router-link to="/goHome">回到首页</router-link>
</el-menu-item>
路由模式与 404
路由模式有两种
- hash:路径带 # 符号,如 http://localhost/#/login
- history:路径不带 # 符号,如 http://localhost/login
?修改路由配置,代码如下:
export default new Router({
mode: 'history',
routes: [
]
});
404 demo 1.创建一个NotFound.vue视图组件 NotFound.vue
<template>
<div>
<h1>404,你的页面走丢了</h1>
</div>
</template>
<script>
export default {
name: "NotFound"
}
</script>
<style scoped>
</style>
修改路由配置index.js
import NotFound from '../views/NotFound'
{
path: '*',
component: NotFound
}
效果图
?路由钩子与异步请求
beforeRouteEnter:在进入路由前执行 beforeRouteLeave:在离开路由前执行
在Profile.vue中写
export default {
name: "UserProfile",
beforeRouteEnter: (to, from, next) => {
console.log("准备进入个人信息页");
next();
},
beforeRouteLeave: (to, from, next) => {
console.log("准备离开个人信息页");
next();
}
}
参数说明: to:路由将要跳转的路径信息 from:路径跳转前的路径信息 next:路由的控制参数 next() 跳入下一个页面 next(’/path’) 改变路由的跳转方向,使其跳到另一个路由 next(false) 返回原来的页面 next((vm)=>{}) 仅在 beforeRouteEnter 中可用,vm 是组件实例 在钩子函数中使用异步请求
安装 Axios
cnpm install --save vue-axios
main.js引用 Axios
import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)
import axios from 'axios' import VueAxios from 'vue-axios' Vue.use(VueAxios, axios) ?
// 静态数据存放的位置
static/mock/data.json
在 beforeRouteEnter 中进行异步请求 Profile.vue
export default {
//第二种取值方式
// props:['id'],
name: "UserProfile",
//钩子函数 过滤器
beforeRouteEnter: (to, from, next) => {
//加载数据
console.log("进入路由之前")
next(vm => {
//进入路由之前执行getData方法
vm.getData()
});
},
beforeRouteLeave: (to, from, next) => {
console.log("离开路由之前")
next();
},
//axios
methods: {
getData: function () {
this.axios({
method: 'get',
url: 'http://localhost:8080/static/mock/data.json'
}).then(function (response) {
console.log(response)
})
}
}
}
5.路由钩子和axios结合图
?
到此结束 完结★,°:.☆( ̄▽ ̄)/$:.°★
|