硅谷外賣項目day03

day03

項目地址

一殿较、完成登錄注冊功能

  1. 2種登錄方式
    • 手機(jī)號/驗證碼登錄
    • 用戶名/密碼/圖片驗證碼登錄
  2. 登錄的基本流程
    • 表單前臺驗證耸峭,如果不通過,提示
    • 發(fā)送ajax請求淋纲,得到返回的結(jié)果
  3. 根據(jù)結(jié)果的標(biāo)識(code)來判斷登錄請求是否成功
    • 1: 不成功劳闹,顯示提示
    • 0: 成功,保存用戶信息洽瞬,跳轉(zhuǎn)到個人中心路由
async login() {
 let result
 //前臺表單驗證
 if (this.loginWay) {
   // 發(fā)送ajax請求本涕,短信登錄
   result = await reqSmsLogin(phone,code)

 } else {
   // 發(fā)送ajax請求,密碼登錄
   result = await reqPwdLogin({name,pwd,captcha})
 }
 //根據(jù)結(jié)果數(shù)據(jù)處理
   if(result.code === 0) {
     const user = result.data
     //將user保存到vuex的state中
     this.$store.dispatch('recordUser',user)
     //去個人中心界面
     this.$router.replace('/profile')
   } else {
     //顯示新的圖形驗證碼
     this.getCaptcha()
     //顯示警告提示
     const msg = result.msg
     this.showAlert(msg)
   }
}

//action.js
  // TODO: 同步記錄用戶信息
  recordUser ({commit},userInfo) {
    commit(RECEIVE_USER_INFO,{userInfo})
  }
//mutations.js
  [RECEIVE_USER_INFO](state,{userInfo}) {
      state.userInfo = userInfo
  },
  1. vue自定義事件
    • 監(jiān)聽事件: @eventName="fn" function fn (data) {//處理}
    • 分發(fā)事件: this.$emit('eventName',data)
<!-- AlertTip提示組件 -->
<template>
  <div class="alert_container">
    <section class="tip_text_container">
      <div class="tip_icon">
        <span></span>
        <span></span>
      </div>
      <p class="tip_text">{{alertText}}</p>
      <div class="confrim" @click="closeTip">確認(rèn)</div>
    </section>
  </div>
</template>

<script>
  export default {
    props: {
      alertText: String
    },

    methods: {
      closeTip() {
        // 分發(fā)自定義事件(事件名: closeTip)
        this.$emit('closeTip')
      }
    }
  }
</script>

<!-- login組件調(diào)用AlertTip組件 -->
<AlertTip :alertText="alertText" v-show="alertShow" @closeTip="closeTip"/>

<script>
  import AlertTip from "../../components/AlertTip/AlertTip.vue";
  export default {
    methods: {
      //關(guān)閉警告框
      closeTip() {
        this.alertShow = false;
        this.alertText = '';
      },
    }
  }
</script>
  1. 注意
    • 使用network查看請求(路徑/參數(shù)/請求方式/響應(yīng)數(shù)據(jù))
    • 使用vue的chrome插件查看vuex中的state和組件中的數(shù)據(jù)
    • 使用debugger語句調(diào)試代碼
    • 實參類型與形參類型的匹配問題
//定義 
fun({a,b,c})  //{a,b,c}是一個對象
//調(diào)用
fun({a,b,c})  //也要傳對象

2伙窃、自動登錄菩颖,退出登錄

  1. 通過會話獲取后臺用戶信息,后臺處理session保持登錄狀態(tài)为障,刷新頁面時登錄存在
// 根據(jù)會話獲取用戶信息
export const reqUserInfo = () => ajax(BASE_URL + '/userinfo')
  // 異步獲取用戶信息
  async getUserInfo({commit}) {
    const result = await reqUserInfo()
    if(result.code === 0) {
      const userInfo = result.data
      commit(RECEIVE_USER_INFO,{userInfo})
    }
  },
  1. 點擊退出登錄晦闰,返回退出登錄狀態(tài)給后臺,刪除前臺用戶信息
logout() {
   Dialog.confirm({
     title: "提示",
     message: "確認(rèn)退出嗎"
   })
   .then(() => {
     //請求退出
     this.$store.dispatch("logout");
     Toast('退出成功');
   })
   .catch(() => {
     console.log("點擊了取消");
   });
}
//actions
  // 異步登出
  async logout ({commit}) {
    const result = await reqLogout()
    if(result.code === 0) {
      commit(RESET_USER_INFO)
    }
  }

3鳍怨、搭建商家整體界面

  1. 學(xué)會拆分界面路由呻右,看出頁面拆分成幾個組件


    頁面組件和路由拆分
  2. 路由的定義/配置|使用---父子路由,路由重定向
{
   path: '/shop',
   component: Shop,
   children: [
     {
       path: '/shop/goods',
       component: ShopGoods
     },
     {
       path: '/shop/ratings',
       component: ShopRatings
     },
     {
       path: '/shop/info',
       component: ShopInfo
     },
     {
       path: '',
       redirect: '/shop/goods'
     },
   ]
},

4鞋喇、模擬(mock)數(shù)據(jù)/接口

  1. 前后臺分離的理解
  2. mock.js的理解和使用
  3. json數(shù)據(jù)設(shè)計的理解
    • JSON分為json對象和json數(shù)組声滥,
    • 結(jié)構(gòu):名稱/數(shù)據(jù)類型
    • 結(jié)構(gòu) + value值,值可以變侦香,結(jié)構(gòu)不可以變
//接口
//獲取商家信息
export const reqShopInfo = () => ajax('/info')  //mock模擬數(shù)據(jù)不需要代理api
//獲取商家評價數(shù)組
export const reqShopRatings = () => ajax('/ratings')
//獲取商家商品數(shù)組
export const reqShopGoods = () => ajax('/goods')

/*mockServer.js*/
/*
使用mockjs提供mock數(shù)據(jù)接口
 */
 import Mock from 'mockjs'
 import data from './data.json'
// 返回goods的接口
Mock.mock('/goods',{code: 0, data: data.goods})
// 返回ratings的接口
Mock.mock('/ratings',{code: 0, data: data.ratings})
// 返回info的接口
Mock.mock('/info',{code: 0, data: data.info})
// export default ???  不需要向外暴露任何數(shù)據(jù), 只需要保存能執(zhí)行即可

5落塑、ShopHeader組件

  1. 異步顯示數(shù)據(jù)效果的編碼流程
  • ajax
    • ajax請求函數(shù)
    • 接口請求函數(shù)
  • vuex
    • state
    • mutation-types
    • actions
    • mutations
  • 組件
    • dispatch(): 異步獲取后臺數(shù)據(jù)到vuex的state
    • mapState(): 從vuex的state中讀取對應(yīng)的數(shù)據(jù)
    • 模板中顯示
  1. 初始化顯示異常
    • 情況1:Cannot read property 'xxx' of undefined"
    • 原因: 初始值是空對象, 內(nèi)部沒有數(shù)據(jù), 而模塊中直接顯示3層表達(dá)式
    • a.b.xxx,undefined表示b未定義
    • 解決: 使用v-if指令
    <!-- 使用v-if判斷info是否加載了數(shù)據(jù),控制是否顯示鄙皇,三級表達(dá)式會出現(xiàn)報錯 -->
    <div class="shop-header-discounts" v-if="info.supports" @click="toggleSupportShow">
      <div class="discounts-left">
        <div class="activity" :class="supportClasses[info.supports[0].type]" >
          <span class="content-tag">
            <span class="mini-tag">{{info.supports[0].name}}</span>
          </span>
          <span class="activity-content ellipsis">{{info.supports[0].content}}</span>
        </div>
      </div>
      <div class="discounts-right">{{info.supports.length}} 個優(yōu)惠</div>
    </div>
  • 情況2: Cannot read property 'xxx' of null"
  • 原因: 數(shù)據(jù)定義時使用了a=null
  • 解決: 直接使用a=[]或a={}定義空對象空數(shù)組
  1. vue transition動畫
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芜赌,一起剝皮案震驚了整個濱河市仰挣,隨后出現(xiàn)的幾起案子伴逸,更是在濱河造成了極大的恐慌,老刑警劉巖膘壶,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡臀叙,警方通過查閱死者的電腦和手機(jī)臼寄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妒蛇,“玉大人,你說我怎么就攤上這事「厮危” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵束世,是天一觀的道長酝陈。 經(jīng)常有香客問我,道長毁涉,這世上最難降的妖魔是什么沉帮? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮贫堰,結(jié)果婚禮上穆壕,老公的妹妹穿的比我還像新娘。我一直安慰自己其屏,他們只是感情好喇勋,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著偎行,像睡著了一般茄蚯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睦优,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天渗常,我揣著相機(jī)與錄音,去河邊找鬼汗盘。 笑死皱碘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隐孽。 我是一名探鬼主播癌椿,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菱阵!你這毒婦竟也來了踢俄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晴及,失蹤者是張志新(化名)和其女友劉穎都办,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡琳钉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年势木,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歌懒。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡啦桌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出及皂,到底是詐尸還是另有隱情甫男,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布验烧,位于F島的核電站查剖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏噪窘。R本人自食惡果不足惜笋庄,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倔监。 院中可真熱鬧直砂,春花似錦、人聲如沸浩习。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谱秽。三九已至洽蛀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疟赊,已是汗流浹背郊供。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留近哟,地道東北人驮审。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像吉执,于是被迫代替她去往敵國和親疯淫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 基于Vue的一些資料 內(nèi)容 UI組件 開發(fā)框架 實用庫 服務(wù)端 輔助工具 應(yīng)用實例 Demo示例 element★...
    嘗了又嘗閱讀 1,151評論 0 1
  • VUE Vue :數(shù)據(jù)驅(qū)動的M V Vm框架 m :model(后臺提供數(shù)據(jù))戳玫,v :view(頁面)熙掺,vM(模板...
    wudongyu閱讀 5,401評論 0 11
  • ## 框架和庫的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計架構(gòu)和**解決方案**。> > 庫(lib...
    Rui_bdad閱讀 2,907評論 1 4
  • 一:什么是閉包咕宿?閉包的用處币绩? (1)閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)蜡秽。在本質(zhì)上,閉包就 是將函數(shù)內(nèi)部和函數(shù)外...
    xuguibin閱讀 9,604評論 1 52
  • 原文首發(fā)于“風(fēng)月史官”公眾號 https://mp.weixin.qq.com/s/W7Pl539xsqz7zVT...
    初初在簡書閱讀 448評論 0 8