Vue学习记录三 --- vue的项目实战
Vue学习记录三 --- vue的项目实战
·
一、常规项目配置安装:
1、安装vue-router路由:
cmd下在当前项目目录下执行 :
npm install vue-router --save-dev
如果因为依赖安装失败,则执行 :
npm install --legacy-peer-deps vue-router --save-dev
如果后续出现版本冲突问题,可以降低版本。
2、安装vue-axios:
cmd下在当前项目目录下执行:
npm install --save axios vue-axios
3、安装element-ui:
cmd下在当前项目目录下执行:
npm i element-ui -S
4、安装sass加载器:
cmd下在当前项目目录下执行:
cnpm install sass-loader node-sass --save-dev
切记版本不要选太高,可以指定版本安装,亲测4.0.0最稳定。
5、将所有安装部署到项目中:
cmd下在当前项目目录下执行:
npm install
6、启动测试:
cmd下在当前项目目录下执行:
npm run dev
二、项目实例:
1、项目结构:
说明:
- assets:用于存放资源文件
- components:用于存放Vue功能组件
- views:用于存放Vue视图组件
- router:用于存放vue-router配置
2、创建组件:
- 在views目录下创建Login.vue组件:(此为element-ui实例,可以自己去官网找模板)
<template> <div> <el-form ref="loginForm" :model="form" :rules="rules" label-width="80px" class="login-box"> <h3 class="login-title">欢迎登录</h3> <el-form-item label="账号" prop="username"> <el-input type="text" placeholder="请输入账号" v-model="form.username"/> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" placeholder="请输入密码" v-model="form.password"/> </el-form-item> <el-form-item> <el-button type="primary" v-on:click="onsubmit('loginForm')">登录</el-button> </el-form-item> </el-form> <el-dialog title="温馨提示" :visible.sync="dialogVisiable" width="30%" :before-close="handleClose"> <span>请输入账号和密码</span> <span slot="footer" class="dialog-footer"> <el-button type="primary" @click="dialogVisible = false">确定</el-button> </span> </el-dialog> </div> </template> <script> export default { name: "Login", data(){ return{ form:{ username:'', password:'' }, //表单验证,需要在 el-form-item 元素中增加prop属性 rules:{ username:[ {required:true,message:"账号不可为空",trigger:"blur"} ], password:[ {required:true,message:"密码不可为空",tigger:"blur"} ] }, //对话框显示和隐藏 dialogVisible:false } }, methods:{ onSubmit(formName){ //为表单绑定验证功能 this.$refs[formName].validate((valid)=>{ if(valid){ //使用vue-router路由到指定界面,该方式称为编程式导航 this.$router.push('/main'); }else{ this.dialogVisible=true; return false; } }); } } } </script> <style lang="scss" scoped> .login-box{ border:1px solid #DCDFE6; width: 350px; margin:180px auto; padding: 35px 35px 15px 35px; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; box-shadow: 0 0 25px #909399; } .login-title{ text-align:center; margin: 0 auto 40px auto; color: #303133; } </style>
- 在views目录下创建Main.vue组件:
<template> <div>首页</div> </template> <script> export default { name:"Main" } </script> <style scoped> </style>
- 在router目录下创建一个名为index.js的vue-route路由配置文件:
//导入vue import Vue from 'vue'; import VueRouter from 'vue-router'; //使用 Vue.use(VueRouter); //导出 export default new VueRouter({ })
vue-router为之前安装的模块,这里进行导入,然后还要安装路由Vue.use()即可使用,还需要暴露路由,让其他组件也能使用,则要最后那段。
将我们之前写两个组件导入,并设置其访问路径与组件。
//导入vue import Vue from 'vue'; import VueRouter from 'vue-router'; //导入组件 import Main from "../views/Main"; import Login from "../views/Login"; //使用 Vue.use(VueRouter); //导出 export default new VueRouter({ routes: [ { //登录页 path: '/main', component: Main }, //首页 { path: '/login', component: Login }, ] })
- 在main.js中配置路由:
import Vue from 'vue' import App from './App' import router from "./router" import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.config.productionTip = false Vue.use(router) Vue.use(ElementUI) /* eslint-disable no-new */ new Vue({ el: '#app', router, render:h=>h(App) })
导入element-ui使其生效。
- 编写APP.vue:
<template> <div id="app"> <router-view></router-view> </div> </template> <script> export default { name: 'App', } </script>
app组件中<router-view>里来显示子组件的视图。
- 测试:
在控制台当前项目下输入:
npm run dev
结果测试成功:
- 在views目录下创建一个目录user,并新建两个组件,一个为List.vue,一个为Profile.vue:
<template> <h1>用户列表</h1> </template> <script> export default { name: "UserList" } </script> <style scoped> </style>
<template> <div> <h1>个人信息</h1> </div> </template> <script> export default { name: "UserProfile", } </script> <style scoped> </style>
- 在views目录下创建一个组件名为Main.vue与NotFound.vue,这个组件采用了element-ui的模板结构:
<template> <div> <el-container> <el-aside width="200px"> <el-menu :default-openeds="['1']"> <el-submenu index="1"> <template slot="title"><i class="el-icon-caret-right"></i>用户管理</template> <el-menu-item-group> <el-menu-item index="1-1"> <!--插入的地方--> <router-link to="/user/profile">个人信息</router-link> </el-menu-item> <el-menu-item index="1-2"> <!--插入的地方--> <router-link to="/user/list">用户列表</router-link> </el-menu-item> <el-menu-item index="1-3"> <!--插入的地方--> <router-link to="/goHome">回到首页</router-link> </el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="2"> <template slot="title"><i class="el-icon-caret-right"></i>内容管理</template> <el-menu-item-group> <el-menu-item index="2-1">分类管理</el-menu-item> <el-menu-item index="2-2">内容列表</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="3"> <template slot="title"><i class="el-icon-caret-right"></i>系统管理</template> <el-menu-item-group> <el-menu-item index="3-1">分类管理</el-menu-item> <el-menu-item index="3-2">内容列表</el-menu-item> </el-menu-item-group> </el-submenu> </el-menu> </el-aside> <el-container> <el-header style="text-align: right; font-size: 12px"> <el-dropdown> <i class="el-icon-setting" style="margin-right: 15px"></i> <el-dropdown-menu slot="dropdown"> <el-dropdown-item>个人信息</el-dropdown-item> <el-dropdown-item>退出登录</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </el-header> <el-main> <!--在这里展示视图--> <router-view /> </el-main> </el-container> </el-container> </div> </template> <script> export default { name: "Main2" } </script> <style scoped lang="scss"> .el-header { background-color: #B3C0D1; color: #333; line-height: 60px; } .el-aside { color: #333; } </style>
<template> <h1>404</h1> </template> <script> export default { name: "NotFound" } </script> <style scoped> </style>
- 在index.js中导入这几个组件路由:
import Vue from 'vue' import VueRouter from 'vue-router' import Content from "../components/Content"; import Main1 from "../components/Main"; import Login from "../views/Login" import Main2 from "../views/Main"; import UserList from "../views/user/List"; import UserProfile from "../views/user/Profile"; import NotFound from "../views/NotFound"; //安装路由 Vue.use(VueRouter) //配置导出路由 export default new VueRouter({ //让地址栏不出现#号 mode: 'history', routes: [ { //路由路径 相当于@RequestMapping path: '/content', name: 'Content', //跳转的组件 component: Content }, { //路由路径 path: '/main1', name: 'Main', //跳转的组件 component: Main1 }, { //路由路径 path: '/login', name: 'Login', //跳转的组件 component: Login, }, { path: '/main2/:username', name: 'Main2', component: Main2, //子组件(嵌套组件) children: [ { path: '/user/profile/:id', component: UserProfile }, { path: '/user/list', component: UserList } ] }, { path : '/goHome', //重定向 redirect: '/main2' }, { path: '*', component: NotFound } ] })
- 进行测试:
其中还有参数传递与钩子函数,实现起来比较简单 ,这里便不一一介绍了,vue基础快速学习结束,之后结合项目去完善更多的高级vue使用,对于后端开发人员来说,学到入门了解即可,也可深入学习慢慢向全栈工程师发展。
更多推荐
已为社区贡献2条内容
所有评论(0)