摘要:前言本來(lái)只是想寫(xiě)個(gè)實(shí)現(xiàn)登錄退出的例子的,但是又覺(jué)得這樣干貨太少。哈哈,不小心被嚇到了吧,其實(shí)這些都是有辦法可以解決的,下次有機(jī)會(huì),我們可以再討論一下使用的正確姿勢(shì)。
前言
本來(lái)只是想寫(xiě)個(gè)Vuet實(shí)現(xiàn)登錄退出的例子的,但是又覺(jué)得這樣干貨太少。一個(gè)好的開(kāi)源項(xiàng)目,少不了單元測(cè)試和e2e測(cè)試,為了保證Vuet教程的豐富性和程序的穩(wěn)定性,所以我選擇了寫(xiě)的例子即能當(dāng)教程使用,也可以用于測(cè)試,豐富的應(yīng)用場(chǎng)景和測(cè)試,能保證日后的版本迭代不會(huì)因?yàn)樾迯?fù)了一個(gè)bug而引發(fā)了一大堆bug的尷尬。
源碼地址例子源碼
測(cè)試源碼
git clone https://github.com/medevicex/vuet.git npm install npm run dev npm run dev:test # 運(yùn)行測(cè)試,需要電腦本地安裝firefox和chrome瀏覽器開(kāi)始
哈哈,上面直接拋源碼地址,感覺(jué)也是挺尷尬的,我們先分析一下我們這個(gè)登錄退出所需要所的功能
登錄頁(yè)面,用戶信息頁(yè)面,是兩個(gè)不同的頁(yè)面,就涉及到了多組件狀態(tài)共享
我期望用戶在已登錄的情況下,每次到用戶信息頁(yè)面時(shí),先渲染本地的用戶信息,然后再去請(qǐng)求服務(wù)器更新本地的用戶信息
將登錄退出的方法,集中起來(lái)管理,方面在在各個(gè)組件中調(diào)用
多組件共享狀態(tài)和方法Vuet提供了全局的mapModules方法,可以讓我們連接到掛載在Vue實(shí)例上的Vuet實(shí)例
ages/Home.vue
import { mapRules, mapModules } from "vuet" export default { mixins: [ // manual:規(guī)則,可以將通用的更新模塊狀態(tài)的方法集中起來(lái), // 可以理解成vuex中的action,只不過(guò)他是可以允許在里面更改模塊狀態(tài)的 // need 規(guī)則,會(huì)在組件每一次的beforeCreate鉤子中,發(fā)送請(qǐng)求更新一次用戶的信息 mapRules({ manual: "user", need: "user" }), // 連接用戶模塊 mapModules({ user: "user" }) ] }定義一個(gè)user模塊
vuet/user.js
export default { data () { // 一個(gè)Object對(duì)象中,是否有data方法,是構(gòu)成Vuet.js一個(gè)模塊的依據(jù) // 當(dāng)你調(diào)用reset方法時(shí),將會(huì)重置整個(gè)模塊的狀態(tài) // 例如在組件中:this.$vuet.reset("模塊名稱") return { name: null, age: null, sex: null, count: 0 } }, async fetch ({ state }) { // 當(dāng)need規(guī)則觸發(fā)更新時(shí),出調(diào)用一次fetch方法更新 // 我們可以在這里直接更改state,也可以return一個(gè)Object對(duì)象來(lái)更新?tīng)顟B(tài) // 在實(shí)際項(xiàng)目中,用戶未登錄時(shí),我們并不需要向服務(wù)器發(fā)送真正的請(qǐng)求 // 所以我們可以判斷一下用戶的名稱是否存在,否則的話不向服務(wù)器進(jìn)行真正的請(qǐng)求 if (state.name === null) return // 下面數(shù)據(jù)因?yàn)槭悄M的,所以就直接return好了 return { name: "Vuet", age: 18, sex: "male", count: ++state.count } }, // 注:你要在組件中使用manual規(guī)則才能向組件注入這些方法 // 例如:mapRules({ manual: "模塊名稱" }) // 調(diào)用:this.$模塊名稱.xxx() manuals: { async signin ({ state }, from) { // 定義了一個(gè)登錄的方法 if (from.name === "Vuet" && from.pass === "2017") { return { success: true, msg: "Login was successful", data: { name: "Vuet", age: 18, sex: "male", count: ++state.count } } } return { success: false, msg: "Logon failure", data: null } }, async sigout () { // 用戶選擇退出后,直接調(diào)用reset的方法即可重置用戶信息 this.reset() } } }實(shí)現(xiàn)用戶登錄
pages/Signin.vue
總結(jié){{ msg }}
其實(shí)教程并沒(méi)有寫(xiě)得特別詳細(xì)的過(guò)程,主要是為了體現(xiàn)出Vuet一種開(kāi)放的姿態(tài),它可以在任意組件直接對(duì)模塊的狀態(tài)進(jìn)行直接的賦值更新,也可以使用類似action的方法進(jìn)行更新,它可以讓你為所欲為,用得好的人可以讓你開(kāi)發(fā)的效率飆升,用得不好,也會(huì)導(dǎo)致你程序中的狀態(tài)難以追蹤變化的記錄。哈哈,不小心被嚇到了吧,其實(shí)這些都是有辦法可以解決的,下次有機(jī)會(huì),我們可以再討論一下使用Vuet的正確姿勢(shì)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87079.html
摘要:這是基于進(jìn)行狀態(tài)管理的完整項(xiàng)目,包含了用戶的登錄退出,路由頁(yè)面,滾動(dòng)位置還原,帖子編輯狀態(tài)保存等等,麻雀雖小,卻是五臟俱全。 前言 上一篇《Vue.js輕松實(shí)現(xiàn)頁(yè)面后退時(shí),還原滾動(dòng)位置》只是簡(jiǎn)單的實(shí)現(xiàn)了路由切換時(shí)進(jìn)行的滾動(dòng)位置還原,很多朋友就來(lái)問(wèn)上拉加載怎么實(shí)現(xiàn)?。∮谑俏蚁肫鹆艘郧白鲞^(guò)一個(gè)叫vue-cnode的項(xiàng)目,于是花了兩天時(shí)間進(jìn)行了重構(gòu),完全的移除了Vuex,使用了Vuet來(lái)做為...
摘要:前端日?qǐng)?bào)點(diǎn)關(guān)注,不迷路精選前端團(tuán)隊(duì)工作流遷移記譯新語(yǔ)法私有屬性知乎專欄前端每周清單大前端技術(shù)生命周期模型發(fā)布面向生產(chǎn)環(huán)境的前端性能優(yōu)化模塊實(shí)現(xiàn)入門(mén)淺析知乎專欄中文一個(gè)線下沙龍中國(guó)最大的前端技術(shù)社區(qū)單頁(yè)面博客從前端到后端基于 2017-06-13 前端日?qǐng)?bào) 點(diǎn)關(guān)注,不迷路:-P 精選 ESLint v4.0.0 released - ESLint - Pluggable JavaScri...
摘要:?jiǎn)卧獪y(cè)試前端的單元測(cè)試目前有兩個(gè)比較熱的框架,一個(gè)是的方式,一個(gè)是。小伙伴們不用急,關(guān)于單元測(cè)試這塊,我會(huì)找時(shí)間寫(xiě)博客的。首先前端的測(cè)試分為兩種,一個(gè)是單元測(cè)試,另一個(gè)就是測(cè)試了。? ? ? ? 因?yàn)楣卷?xiàng)目要用vue框架,所以會(huì)用vue-cli來(lái)新建項(xiàng)目。用過(guò)vue的都知道,要全局安裝vue以及腳手架vue-cli,然后執(zhí)行vue init webpack projectname來(lái)新建vu...
摘要:打開(kāi)瀏覽器輸入,會(huì)看到構(gòu)建的項(xiàng)目的主頁(yè)目錄結(jié)構(gòu)使用編輯器打開(kāi)推薦使用,下面具體看看目錄結(jié)構(gòu)在中,根據(jù)我們?cè)跇?gòu)建項(xiàng)目的時(shí)候的選項(xiàng),有以下幾個(gè)命令。 構(gòu)建一個(gè) vue 項(xiàng)目最簡(jiǎn)單的方式就是使用腳手架工具 vue-cli 。前端的三大框架都有自己的腳手架工具,其作用就是用配置好的模板迅速搭建起一個(gè)項(xiàng)目工程來(lái),省去自己配置 webpack 配置文件的基本內(nèi)容,大大降低了初學(xué)者構(gòu)建項(xiàng)目的難度。這...
摘要:它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。安裝和使用在之后的實(shí)踐過(guò)程中講解。有一套良好的代碼規(guī)范,對(duì)于項(xiàng)目的開(kāi)發(fā)和維護(hù)都很友好。 努力了,不一定能成功,但是不努力,感覺(jué)好舒服啊 ——努訓(xùn) 沒(méi)有了解過(guò)vue1.*,直接上手vue2.0;雖然有些吃力但還是很愉快了學(xué)下來(lái)了。 一丶環(huán)境配置 node.js...
閱讀 3966·2021-11-24 09:38
閱讀 1440·2021-11-19 09:40
閱讀 2785·2021-11-18 10:02
閱讀 3708·2021-11-09 09:46
閱讀 1780·2021-09-22 15:27
閱讀 3121·2019-08-29 15:24
閱讀 1009·2019-08-29 12:40
閱讀 1693·2019-08-28 18:24