• 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
    【转载文章务必保留出处和署名,谢谢!】
  • 相关阅读:
    点击图片显示原图
    SQL判断语句
    窗口淡入淡出效果
    判断两段时间之间的时间差
    软件行业发展趋势
    VSS客户端不能访问问题“unable to open user login file\\服务器项目管理目录\data\logedin\用户名.log ”
    鑫哥儿子顺利降生了!
    面向对象原则之单一职责原则实现
    PHP编码,乱码问题
    泛型中的default(T)
  • 原文地址:https://www.cnblogs.com/xianquan/p/12491624.html
  • Copyright © 2020-2023  润新知