1. 程式人生 > >從零開始-vue.js(2)登入介面之vue-router實現頁面的跳轉

從零開始-vue.js(2)登入介面之vue-router實現頁面的跳轉

基於第一篇的樣式,給按鈕、超連結加上跳轉,用vue-router 實現頁面的跳轉。

首先,新增一個可以跳轉的頁面:Home.vue

<template>
<div>
    <h1>主頁面</h1>歡迎!<b @click = "Login">點這裡登入</b>
</div></template> 

<script>
export default {
   methods: {
       Login () {
           this.$router.replace('/Login')
       }
   }
}</script>

然後,在main.js中引入兩個元件:Login、Home,方便後面router呼叫,修改後的main.js 如圖:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'//引入路由配置
import  './assets/zhongda.jpeg'
import forgetPass from './components/forgetPass.vue'
import Login from './components/Login.vue'
import Home from './components/Home.vue'

import ElementUI from 'element-ui'
import '../theme/index.css'


//建立和掛載根例項,通過router 配置引數注入路由,從而讓整個應用都有路由功能

Vue.config.productionTip = false
Vue.use(ElementUI)

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

然後,當然是修改router下的index.js檔案啦,主要是要引入router的兩個路徑,一個指向Login.vue,另一個指向Home.vue:

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home.vue'
import Login from '@/components/Login.vue'
//懶載入方式,當路由被訪問的時候才載入對應元件
//const Login = resolve => require(['@/components/Login'], resolve)

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/Home',
      name: 'Home',
      component: Home
    },
    {
      path: '/Login',
      name: 'Login',
      component: Login
    },
  ]
})

然後,就是修改Login.vue中,按鈕“登入”的點選事件了,要求點選按鈕,頁面將自動跳轉到Home.vue,由於我一開始使用el-button標籤和v-on : click始終無法正常跳轉,因此,改變為普通button,再自己調樣式,利用@click = 方法最終實現正常跳轉:

<template>
<!--背景圖-->
<div class = "note" :style = "note">

<!--login框,表單+tab標籤頁的組合-->
<div class = "loginFrame">

<!--表單元件放在外面,標籤欄在裡面-->
    <el-form ref = "AccountForm" :model = "AccountForm"   rules = "rules"  class = "demo-ruleForm login-container">

       <!--tab標籤-->
    <div class = "tabsUser">
    <el-tabs v-model = "activeName" @tab-click = "handleClick" class = "users" style = "height: 30px;font-size: 25px">
        <el-tab-pane label = "學生" name = "students" class = "tab1"></el-tab-pane>
        <el-tab-pane label = "教師" name = "teacher" class = "tab2"></el-tab-pane>
        <el-tab-pane label = "教務老師" name = "eduTeacher" class = "tab3"></el-tab-pane>
    </el-tabs>
    </div>

<div class = "formGroup">
<el-form-item  label = "賬號" prop = "user" >
    <el-input type = "text"  auto-complete = "off" placeholder = "請輸入您的賬號" class = "form-control" ></el-input></el-form-item> 
<el-form-item label = "密碼" prop = "password" class = "form-inline">
    <el-input type = "password" auto-complete = "off" placeholder = "請輸入密碼" class = "form-control" ></el-input></el-form-item>
</div>
<div class = "remFor">
<el-checkbox v-model = "checked" checked class = "remember">記住密碼</el-checkbox>
<router-link to = "/forgetPass" class = "forget ">忘記密碼?</router-link>
<router-view></router-view>
</div>
  
  <div class = "formButton">
<el-form-item style = "width:100%;">
    <button style = "width:100%; height: 35px; background: #3A825E; font-size:14px; font-family:PingFang SC; color:#fff; border-radius:10px " @click =  "login" >登入</button>
</el-form-item>
</div>
    </el-form>
    </div>
    </div>

</template>

<script>

export default {
    name: '登入',
    data() {
        return {
            note: {
                position:"absolute",
                top:"0px",
                left:"0px",
                width: "100%",
                height:"100%",
                backgroundImage: "url(" + require("../assets/zhongda.jpeg") + ")",
                backgroundSize: "100% 100%",
                backgroundRepeat: "no-repeat",
                
            
            },
            AccountForm : {
                username:'admin',
                password:'123456',
            },
            rules: {
                username :[
                    {required: true, message: '請輸入賬號',trigger: 'blur'},
                    //{ validator: validaePass }
                ],
                password: [
                    {required: true,message: '請輸入密碼', trigger: 'blur'},
                    //{ validator: validaePass2 }
                ]
            },
            checked: false
           
        };
        
    },
    methods: {

        login() {
            this.$router.replace('/Home')
            
         }

}
}
</script>

<style>

.login-container {
    
    -webkit-border-radius: 5px;
    border-radius: 15px;
    -moz-border-radius: 5px;
    background-clip: padding-box;
    margin: 180px auto;
    width: 350px;
    padding: 35px 35px 15px 35px;
    background: rgba(255,255,255,0.7)

    ;
    border: 1px solid #eaeaea;
    box-shadow: 0 0 25px #cac6c6;
   
}
label{
    width:70px;
    text-align:left;
    
    
    }

.form-control{
    width:270px;
    flex: 1;
    -webkit-flex: 1;
    -ms-flex: 1;

}
.remember{
    width:250px;
    text-align:left;

    
}
.forget{
    width:500px;
    text-align:right;
    font-size:14px;
    font-family:PingFang SC;
    
}
.remFor{
    margin-bottom: 10px;
    padding-bottom: 10px;
}
.tabsUser{
    display: inline-block;
    margin-left: 0px;
    margin-right:0px;
    text-align:center;
    font-size:25px;
}



 </style>

最終實現的效果是:開啟頁面,預設指向第一個Home.vue頁面,然後點選“點這裡登入”就可以跳轉到登入介面,同樣,點選“登入”按鈕也可以跳轉到Home頁面,效果如下:



最後,考慮到我的系統是想要首先進入登入介面的,因此,我在index.js中做了些許調整,將Login元件的path與Home元件的path互換,讓系統預設路徑變為Login,使用者需要點選才能進入Home頁面,同時,相應的Login.vue/Home.vue的path也要更換。最後實現了頁面之間的跳轉