1. 程式人生 > >vue專案實踐教程2:使用vux設計登入註冊,並講解vue路由,切換頁面標題等內容

vue專案實踐教程2:使用vux設計登入註冊,並講解vue路由,切換頁面標題等內容

上一章筆者介紹vux專案的搭建和簡介,這裡筆者設計幾個登入註冊頁面,來講解vux中的相關元件的使用,和vue的相關基礎知識。
1.我們在與components資料夾同級的目錄下建立一個views資料夾,資料夾中再建立一個user資料夾,用於存放和使用者相關的頁面操作。
在user資料夾下,筆者先建立一個Regist.vue檔案。
2.現在註冊元件已經有了,但是我們怎麼才能讓這個元件顯示出來呢?我們知道,vue是元件化機制比較明顯的一個框架,我們建立的每個vue檔案都是一個元件,那我們怎麼才能讓這個元件顯示在頁面上呢?其中一種方式,通過路由的形式,連線到這個元件,讓元件顯示出來。
我們找到src/router目錄,該目錄下有一個index.js檔案,開啟該檔案,可以看到有import語句,其中HelloWord就是通過import匯入進來的,同樣,我們將Regist.vue通過import 的形式匯入進來。我們將元件匯入進來之後,就需要去使用它,那麼怎麼使用呢?
仔細往下看,有一個routes陣列,這個陣列中儲存的就是各元件的資訊。

{
    path:'/Regist',
    name:'Regist',
    component:Regist
 }

我們以這樣的形式,將註冊元件新增到路由中去,path代表的路由路徑,也就是你要訪問的連結路徑,name代表這個路由的名稱,你在後續進行路由跳轉的時候,可以通過path跳轉,也可以通過name進行跳轉,component表示引用的哪個元件。
路由註冊成功只有,我們就可以通過訪問該路由訪問到註冊元件。
3.既然我們的註冊元件已經可以顯示出來了,那麼我們就要往這個元件中新增內容。
在vue元件中,template標籤內的是要顯示在頁面中的元素節點,該標籤內需要包含一個標籤,該元件想要表現的內容需要全部放到這個標籤中,如果template標籤下的字標籤出現了兩個同極標籤,編譯會報錯。
script中主要儲存一些資料,和寫一些邏輯。
style中用於寫頁面樣式,如果我們想要讓我們寫的樣式只針對本元件產生效果,我們需要在style裡新增scoped。

<style scoped lang="less">

由於我們的vue元件最終會打包成一個檔案,我們在一個元件內的寫的樣式有可能會對其他元件產生影響,當然,我們也可以不用加那個欄位,那就需要人為可以的防止產生樣式衝突。
如果我們用less或者sass編寫css,就需要通過lang=”“的方式來宣告。在vux專案中,已經通過webpack對less和sass進行了引入宣告,因此,我們直接使用就可以。
下面看一下注冊的部分程式碼:

<template>
    <div class="regist">
        <group>
<x-input title="" name="mobile" placeholder="請輸入手機號" v-model="mobile" keyboard="number" is-type="china-mobile" required></x-input> <x-input title="" type="text" placeholder="請輸入驗證碼" v-model="code" required> <x-button slot="right" type="primary" mini :disabled="getCode.disabled" @click.native="handleGetCode" style="width: 100px;">{{getCode.txt}}</x-button> </x-input> <x-input title="" type="password" placeholder="請設定登入密碼" v-model="password" :min="6" :max="16" required></x-input> <x-input title="" type="password" placeholder="確認密碼" v-model="passwordC" :min="6" :max="16" required></x-input> </group> <p><span>註冊後,您的微信賬號和手機號都可以登入</span></p> <box gap="10px 25px"> <x-button type="primary" @click.native="handleRegist">註冊</x-button> </box> <p> <router-link to="/Login">已有賬號?去登入</router-link> </p> </div> </template> <script> import { XInput, Box, Group, XButton } from 'vux' export default { name: 'regist', data() { return { mobile: '', //手機號 code: '', //驗證碼 password: '', //密碼 passwordC: '', //確認密碼 getCode: { txt: '獲取驗證碼', disabled: false, } } }, methods: { handleGetCode() { if(this.mobile) { this.getCode.disabled = true; this.getCode.txt = '獲取中...'; let seconds = 60; let self = this; let time = setInterval(function() { --seconds; self.getCode.txt = seconds + 's'; if(seconds <= 0) { clearInterval(time); self.getCode.disabled = false; self.getCode.txt = '獲取驗證碼'; } }, 1000) } else { this.$vux.toast.text('請先填寫手機號'); } }, handleRegist() { if(!this.mobile || !this.code || !this.password || !this.passwordC) { this.$vux.toast.text('您有未填項,不能註冊') } else if(this.password != this.passwordC) { this.$vux.toast.text('兩次輸入的密碼不一致') } else { this.$vux.toast.text('註冊成功') } } }, created() { window.document.title = '註冊'; }, components: { XInput, XButton, Group, Box } } </script>

在這裡我們用到了vuxUI框架中的XInput,Box, Group, XButton元件,因此,我們需要把他們按需引入進來,引入進來後,需要在components中宣告一下,這樣才能正常使用相關元件。
對於各個元件的使用,我這裡不做過多講解,同志們可以直接去檢視相關技術文件,那裡比我這裡講的要詳細。
這裡需要宣告一點,對於XButton按鈕的點選事件,我們需要使用@click.native的形式宣告
有讀者可能會問,this.$vux.toast.text()是怎麼回事,這裡呼叫了vux中的Toast元件,但是我們為什麼沒有匯入宣告呢?其實已經匯入了,但是不是在這裡,而是在main.js 中。
我們開啟main.js,加入下面的內容:

import  { ToastPlugin, LoadingPlugin } from 'vux'

Vue.use(ToastPlugin)
Vue.use(LoadingPlugin)

我們以外掛的形式引入了Toast相關內容,並且通過Vue.use()的形式去宣告使用。
上述程式碼中,data()中的內容主要用於儲存資料,這裡面返回的資料可以繫結到頁面標籤內,從而實現頁面資料的展示。
methods中主要是寫一些邏輯方法,比如上述中的按鈕點選事件方法,方法的編寫形式,如果剛入門可以按照平時js中函式的編寫形式寫就行。如果想操作data()中的資料,可以通過“this.變數”的形式拿到資料,然後進行操作。
create()中的內容是幹什麼的呢?這裡是當該vue元件被建立的時候呼叫的內容,這裡涉及到vue宣告週期的相關的內容,感興趣的讀者可以直接去官網,或者搜尋相關資料瞭解。
因為我們操作的都是元件,不像那些一個個html我們可以直接寫title,所以,如果我們想讓每個元件顯示不同的標題該怎麼辦?
通過 window.document.title = ‘註冊’ 的形式就可以。該直接放在script標籤內也可以,但是最好放在create()內,保證每次元件建立都會修改標題內容。
好,我們看一下頁面的表現效果。
這裡寫圖片描述
同樣我們可以將登入元件編寫出來,那麼這兩個元件之間怎麼進行跳轉呢?答案見上述程式碼,有這麼一句話:

<router-link to="/Login">已有賬號?去登入</router-link>

如果我們想要通過點選頁面某個元素然後進行跳轉,可以通過上述router-link的形式,to表示的是你要跳轉的路由元件,我們可以以路經的形式,也可以直接通過路由名稱進行跳轉,另外to的內容也可以這樣寫:

:to="{path:'/Login'}"

同樣可以達到效果。
那麼,如果我們想要通過js來實現路由跳轉,該怎麼辦呢?在點選事件中通過如下方式來實現路由跳轉。

this.$router.push({
    path:'/Login'
})

好,如果還有不明白的讀者,可以直接訪問專案地址,檢視原始碼。
vue零售商城專案原始碼