淺入深出Vue:注冊


基本布局已經有了, 現在我們來開始做我們的注冊頁面~
當然需要注冊才能發表文章啊(糟老頭子壞得很, 我可以只有我一個人能發啊)。

這里我們設定只有注冊才能發表文章,也就淡化了管理員這個概念。在開發中先將原型做出來,然后再對其進行迭代、重構來達到我們最終想要的效果。

准備

  1. 新建 vue 組件,編寫注冊頁面的代碼

  2. 為這個組件建立路由對象

這里我們依舊是采用 ElementUI 中的組件,因為是注冊,需要提交表單。

因此我們來看看 ElementUI 中表單組件相關的文檔:

官方文檔:點擊查看

實現登錄頁面

首先先在 views 目錄下新建 Signup.vue組件。

然后編寫視圖代碼:

<template>
    <div>
        <el-form>
            <el-form-item prop="username" label="用戶名">
                <el-input></el-input>
            </el-form-item>

            <el-form-item prop="password" label="密碼">
                <el-input type="password"></el-input>
            </el-form-item>

            <el-form-item prop="rePassword" label="確認密碼">
                <el-input type="password"></el-input>
            </el-form-item>

            <el-form-item>
                <el-button type="primary" size="small">注冊</el-button>
            </el-form-item>

        </el-form>
    </div>
</template>

<script>
    export default {
        name: "Signup"
    }
</script>

<style scoped>

</style>

這里只是實現了頁面, 還沒有實現其他的邏輯。

建立路由對象

其實路由對象應該和組件建立一起,當你的組件新建之后,就應該去為它建一個路由對象。

這樣你能夠邊寫代碼,邊看實際效果。

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/about',
      name: 'about',
      component: () => import(/* webpackChunkName: "about" */ './views/About.vue')
    },
    {
      path: '/signup',
      name: 'signup',
      component: () => import('./views/Signup.vue')
    }
  ]
})

好了, 現在我們可以來看看效果:

這個效果有點感人啊,整個元素全部鋪開在頁面上,完全沒有用戶體驗了。

不行, 我們得改改,雖說不是專業的設計師。但是基本的設計還是要有的

重構布局

這里我們依舊在 ElementUI 中查找看是否有現成的解決方案:

布局文檔:點擊查看

很好, 這里我們可以利用 el-row, el-col 來進行布局。

它是基於24分欄的柵欄布局,我們想要讓這個表單居中應該怎么辦呢?

要居中的話, 左右兩邊的柵欄數相等即可,也就實現了表單這個塊元素是位於水平居中的。

代碼:

<template>
    <div>
        <el-row>
            <el-col :span="6" :offset="9">
                <el-form label-width="80px">
                    <el-form-item prop="username" label="用戶名">
                        <el-input></el-input>
                    </el-form-item>

                    <el-form-item prop="password" label="密碼">
                        <el-input type="password"></el-input>
                    </el-form-item>

                    <el-form-item prop="rePassword" label="確認密碼">
                        <el-input type="password"></el-input>
                    </el-form-item>

                    <el-form-item>
                        <el-button type="primary" size="small">注冊</el-button>
                    </el-form-item>
                </el-form>
            </el-col>
        </el-row>
    </div>
</template>

<script>
    export default {
        name: "Singup"
    }
</script>

<style scoped>

</style>

上面代碼中的 69都是計算得來的,總共是24,左右兩邊又要相等,那么中間的表單占用了 6格,還剩下18格。平分下來每邊就是9格了。

現在效果就好很多了:

編寫登錄邏輯

頁面已經完成, 剩下的就是編寫注冊邏輯:

  • 點擊注冊,首先驗證密碼和確認密碼是否一致

  • 密碼一致則向后端接口發起請求

這里的接口我們使用 postman 模擬出來的接口。

在這之前我們先把數據定義一下, 並且綁定到表單元素中去:

data() {
    return {
        model: {
            username: '',
            password: '',
            rePassword: ''
        }
    };
},
<template>
    <div>
        <el-row>
            <el-col :span="6" :offset="9">
                <el-form label-width="80px">
                    <el-form-item prop="username" label="用戶名">
                        <el-input v-model="model.username"></el-input>
                    </el-form-item>

                    <el-form-item prop="password" label="密碼">
                        <el-input type="password" v-model="model.password"></el-input>
                    </el-form-item>

                    <el-form-item prop="rePassword" label="確認密碼">
                        <el-input type="password" v-model="model.rePassword"></el-input>
                    </el-form-item>

                    <el-form-item>
                        <el-button type="primary" size="small">注冊</el-button>
                    </el-form-item>
                </el-form>
            </el-col>
        </el-row>
    </div>
</template>

首先給注冊按鈕添加對應事件:

<el-button type="primary" size="small" @click="submit">注冊</el-button>

然后在 methods 中實現此函數:

submit() {
    if(this.model.password !== this.model.rePassword){
        this.$message.error('兩次出入密碼不一致.');
        return ;
    }

    axios.post('https://451ece6c-f618-436b-b4a2-517c6b2da400.mock.pstmn.io/signup', this.model)
        .then(res => {
            if(res.data.Code === 200){
                this.$message.success("注冊成功");
            }
        });
}

實際效果:

這段邏輯中使用了 axios 庫用來向后端接口發起異步請求,具體的使用方式可以查閱官方文檔:

看雲文檔

到底為止,注冊功能算是完成了80%了,剩下的等把登錄頁面寫完之后,再加上:

  • 注冊成功后跳轉到登錄頁面即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM