VueRouter 第一个工程

概述

我们结合 ElementUI 组件库,将所需知识点应用到实际中,以最快速度带领大家掌握 Vue 的使用

创建工程

  注意: 使用 NPM 安装相关组件依赖时可能会遇到权限问题,此时使用 PowerShell 管理员模式运行即可;开始菜单 -> 鼠标右击 -> Windows PowerShell (管理员)

创建一个名为 hello-vue-element 的工程

# 使用 webpack 打包工具初始化一个名为 hello-vue-element 的工程
vue init webpack hello-vue-element

安装依赖

我们需要安装 vue-routerelement-uisass-loader 和 node-sass 四个插件

# 进入工程目录
cd hello-vue-element
# 安装 vue-router
npm install vue-router --save-dev --registry=https://registry.npm.taobao.org
# 安装 element-ui
npm i element-ui -S --registry=https://registry.npm.taobao.org
# 安装 SASS 加载器
npm install sass-loader node-sass --save-dev --registry=https://registry.npm.taobao.org
# 安装依赖
npm install --registry=https://registry.npm.taobao.org

启动项目

npm run dev

运行项目

在浏览器打开 http://localhost:8080

第一个 ElementUI 页面

目录结构

在源码目录中创建如下结构:

  • assets:用于存放资源文件
  • components:用于存放 Vue 功能组件
  • views:用于存放 Vue 视图组件
  • router:用于存放 vue-router 配置

创建首页视图

在 views 目录下创建一个名为 Main.vue 的视图组件;该组件在当前章节无任何作用,主要用于登录后展示登录成功的跳转效果;

 1 <template>
 2     <div>
 3       首页
 4     </div>
 5 </template>
 6 <script>
 7     export default {
 8         name: "Main"
 9     }
10 </script>
11 <style scoped>
12 </style>
View Code

创建登录页视图

在 views 目录下创建一个名为 Login.vue 的视图组件,其中 el-* 的元素为 ElementUI 组件;

 1 <template>
 2   <div>
 3     <el-form ref="loginForm" :model="form" :rules="rules" label-width="80px" class="login-box">
 4       <h3 class="login-title">欢迎登录</h3>
 5       <el-form-item label="账号" prop="username">
 6         <el-input type="text" placeholder="请输入账号" v-model="form.username"/>
 7       </el-form-item>
 8       <el-form-item label="密码" prop="password">
 9         <el-input type="password" placeholder="请输入密码" v-model="form.password"/>
10       </el-form-item>
11       <el-form-item>
12         <el-button type="primary" v-on:click="onSubmit('loginForm')">登录</el-button>
13       </el-form-item>
14     </el-form>
15     <el-dialog
16       title="温馨提示"
17       :visible.sync="dialogVisible"
18       width="30%"
19       :before-close="handleClose">
20       <span>请输入账号和密码</span>
21       <span slot="footer" class="dialog-footer">
22         <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
23       </span>
24     </el-dialog>
25   </div>
26 </template>
27 <script>
28   export default {
29     name: "Login",
30     data() {
31       return {
32         form: {
33           username: '',
34           password: ''
35         },
36         // 表单验证,需要在 el-form-item 元素中增加 prop 属性
37         rules: {
38           username: [
39             {required: true, message: '账号不可为空', trigger: 'blur'}
40           ],
41           password: [
42             {required: true, message: '密码不可为空', trigger: 'blur'}
43           ]
44         },
45         // 对话框显示和隐藏
46         dialogVisible: false
47       }
48     },
49     methods: {
50       onSubmit(formName) {
51         // 为表单绑定验证功能
52         this.$refs[formName].validate((valid) => {
53           if (valid) {
54             // 使用 vue-router 路由到指定页面,该方式称之为编程式导航
55             this.$router.push("/main");
56           } else {
57             this.dialogVisible = true;
58             return false;
59           }
60         });
61       }
62     }
63   }
64 </script>
65 <style lang="scss" scoped>
66   .login-box {
67     border: 1px solid #DCDFE6;
68     width: 350px;
69     margin: 180px auto;
70     padding: 35px 35px 15px 35px;
71     border-radius: 5px;
72     -webkit-border-radius: 5px;
73     -moz-border-radius: 5px;
74     box-shadow: 0 0 25px #909399;
75   }
76   .login-title {
77     text-align: center;
78     margin: 0 auto 40px auto;
79     color: #303133;
80   }
81 </style>
View Code

创建路由

在 router 目录下创建一个名为 index.js 的 vue-router 路由配置文件

 1 import Vue from 'vue'
 2 import Router from 'vue-router'
 3 import Login from "../views/Login"
 4 import Main from '../views/Main'
 5 Vue.use(Router);
 6 export default new Router({
 7   routes: [
 8     {
 9       // 登录页
10       path: '/login',
11       name: 'Login',
12       component: Login
13     },
14     {
15       // 首页
16       path: '/main',
17       name: 'Main',
18       component: Main
19     }
20   ]
21 });
View Code

配置路由

  • 修改 main.js 入口代码
 1 import Vue from 'vue'
 2 import VueRouter from 'vue-router'
 3 import router from './router'
 4 // 导入 ElementUI
 5 import ElementUI from 'element-ui'
 6 import 'element-ui/lib/theme-chalk/index.css'
 7 import App from './App'
 8 // 安装路由
 9 Vue.use(VueRouter);
10 // 安装 ElementUI
11 Vue.use(ElementUI);
12 new Vue({
13   el: '#app',
14   // 启用路由
15   router,
16   // 启用 ElementUI
17   render: h => h(App)
18 });
View Code
  • 修改 App.vue 组件代码
 1 <template>
 2   <div id="app">
 3     <router-view/>
 4   </div>
 5 </template>
 6 <script>
 7   export default {
 8     name: 'App',
 9   }
10 </script>
View Code

在浏览器打开 http://localhost:8080/#/login

注意vue引入sass-loader报错: 

  Module build failed: TypeError: this.getResolve is not a function

原因:
sass-loader的版本过高,导致的编译错误,当前最高版本是8.x,需要退回到7.3.1。

我的解决办法是:

先卸载sass-loader:

npm uninstall sass-loader(卸载当前版本)

再安装7.3.1版本:

npm install sass-loader@7.3.1 --save-dev

 vue-admin-template克隆地址

https://github.com/xianquan3230/vue-adnib-template.git
博客园:https://www.cnblogs.com/xianquan
Copyright ©2020 l-coil
【转载文章务必保留出处和署名,谢谢!】
【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/xianquan/p/12491624.html