硅谷外賣

難點:

image.png

異步顯示食品分類輪播列表

1.通過一維數組生成二維數組 ?

通過二維數組遍歷顯示圖片

異步顯示食品分類列表

2.延遲到更新界面如何做?

使用watch$nextTick(callback)解決輪播bug

由于創(chuàng)建的Swiper實例對象,更新早于數據更新,無法實現輪播.
使用setTimeout可以實現效果,但不是很好,因為不知道數據何時更新完,無法準確控制時間進行界面更新.
$nextTick()
用法:將回調延遲到下次DOM更新循環(huán)之后執(zhí)行.在修改數據之后立即使用它,然后等待DOM更新.它跟全局方法Vue.nextTick一樣,不同的是回調的this自動綁定到調用它的實例上.

<template>
  <!--首頁導航-->
    <nav class="msite_nav">
      <div class="swiper-container" v-if="(categorys.length)">
        <div class="swiper-wrapper">
          <div class="swiper-slide" v-for="(categorys,index) in categorysArr" :key="index">
            <a href="javascript:" class="link_to_food" v-for="(category,index) in categorys" :key="index">
              <div class="food_container">
                <img :src="baseImageUrl+category.image_url">
              </div>
              <span>{{category.title}}</span>
            </a>
          </div>
        </div>
</template>

<script>
  import {mapState} from 'vuex'
  import Swiper from 'swiper'
  import 'swiper/css/swiper.min.css'

  import HeaderTop from '../../components/HeaderTop/HeaderTop'
  import ShopList from '../../components/ShopList/ShopList'

  export default {
    data () {
      return {
        baseImageUrl: 'https://fuss10.elemecdn.com'
      }
    },
    mounted () {
      this.$store.dispatch('getCategorys')
      this.$store.dispatch('getShops')
    },
    computed: {
      ...mapState(['address', 'categorys']),
      /*
      根據categorys一維數組生成一個二維數組
      小數組中的元素個數最大是8
       */
      categorysArr () {
        //取出一維數組
        const {categorys} = this
        //準備空的二維數組
        const arr = []
        //準備一個小數組(最大長度是8)

        let minArr = []
        //遍歷categorys
        categorys.forEach(c => {
          //如果當前小數組已經滿了革为,創(chuàng)建一個新的
          if (minArr.length === 8) {
            minArr = []
          }
          //如果minArr是空的,將小數組保存到大數組中
          if (minArr.length === 0) {
            arr.push(minArr)
          }
          //將當前分類保存到小數組
          minArr.push(c)
        })
      return arr
      }
    },

     /*watch:{
      categorys(value){//數據更新(categorys數組中有數據了,在異步更新界面之前執(zhí)行)
        //使用setTimeout可以實現效果,但是不是很好
        setTimeout(()=>{
          //創(chuàng)建一個Swiper實例對象,來實現輪播
          new Swiper('.swiper-container', {
            loop: true,//可以循環(huán)輪播
            //如果需要分頁器
            pagination: {
              el: '.swiper-pagination',
            }
          })
        },100)
      }
    },*/

    watch:{
      categorys(value){//數據更新(categorys數組中有數據了,在異步更新界面之前執(zhí)行)
        //界面更新就立即創(chuàng)建Swiper對象
        this.$nextTick(() => {//一旦完成界面更新领铐,立即調用(此條語句要寫在數據更新之后)
          //創(chuàng)建一個Swiper實例對象,來實現輪播
          new Swiper('.swiper-container', {
            loop: true,//可以循環(huán)輪播
            //如果需要分頁器
            pagination: {
              el: '.swiper-pagination',
            }
          })
        })
      }
    },
    components: {
      HeaderTop,
      ShopList,
    }
  }
</script>

3.開發(fā) Star 組件: 通過計算屬性實現

<template>
  <div class="star" :class="'star-'+size">
    <span class="star-item" v-for="(sc,index) in starClasses" :class="sc" :key="index"></span>
  </div>
</template>

<script>
  //類名常量
  const CLASS_ON = 'on'
  const CLASS_HALF = 'half'
  const CLASS_OFF = 'off'
  export default {
    props: {
      score: Number,
      size: Number
    },
    computed: {
      /*
      小數大于0.5就有一顆半星
      3.2: 3 + 0 + 2
      3.5: 3 + 1 + 1
       */
      starClasses () {
        const {score} = this
        const scs = []
        //向scs中添加n個CLASS_ON
        const scoreInteger = Math.floor(score)
        for (let i = 0; i < scoreInteger; i++) {
          scs.push(CLASS_ON)
        }
        //向scs中添加0/1個CLASS_HALF
        if (score * 10 - scoreInteger * 10 >= 5) {
          scs.push(CLASS_HALF)
        }
        //向scs中添加n個CLASS_OFF
        while (scs.length < 5) {
          scs.push(CLASS_OFF)
        }

        return scs;
      }
    }
  }
</script>

4.前后臺交互相關問題

1).如何查看你的應用是否發(fā)送某個ajax請求?
瀏覽器的network;
2).發(fā)ajax請求404
請求的路徑不對
代理是否生效(配置和重啟)
服務器應用是否運行
3).后臺返回了數據,但頁面沒有顯示?
vuex中是否有
組件中是否讀取

5.異步數據:
封裝ajax:
promise+axios封裝ajax請求的函數
封裝每個接口的對應的請求函數(能根據接口定義ajax請求函數)
解決ajax的跨域問題:配置代理抓谴,對代理的理解
瀏覽器是不知道代理的存在滤蝠,瀏覽器提交的是對當前前臺應用的請求,請求的是8080昆码,
前臺服務器的端口號:8080, 后臺服務器的端口號4000邻储,前后臺都是運行在服務器之上
前臺應用發(fā)的8080的請求赋咽,代理服務器去攔截它,將它轉發(fā)后臺服務器4000去處理吨娜,返回的結果代理又將它轉發(fā)給8080

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末脓匿,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子宦赠,更是在濱河造成了極大的恐慌陪毡,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勾扭,死亡現場離奇詭異毡琉,居然都是意外死亡,警方通過查閱死者的電腦和手機妙色,發(fā)現死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門桅滋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事丐谋∩直蹋” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵号俐,是天一觀的道長泌豆。 經常有香客問我,道長吏饿,這世上最難降的妖魔是什么踪危? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮找岖,結果婚禮上陨倡,老公的妹妹穿的比我還像新娘。我一直安慰自己许布,他們只是感情好兴革,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜜唾,像睡著了一般杂曲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袁余,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天擎勘,我揣著相機與錄音,去河邊找鬼颖榜。 笑死棚饵,一個胖子當著我的面吹牛,可吹牛的內容都是我干的掩完。 我是一名探鬼主播噪漾,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼且蓬!你這毒婦竟也來了欣硼?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恶阴,失蹤者是張志新(化名)和其女友劉穎诈胜,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體冯事,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡焦匈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了昵仅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缓熟。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出荚虚,到底是詐尸還是另有隱情,我是刑警寧澤籍茧,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布版述,位于F島的核電站,受9級特大地震影響寞冯,放射性物質發(fā)生泄漏渴析。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一吮龄、第九天 我趴在偏房一處隱蔽的房頂上張望俭茧。 院中可真熱鬧,春花似錦漓帚、人聲如沸母债。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毡们。三九已至,卻和暖如春昧辽,著一層夾襖步出監(jiān)牢的瞬間衙熔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工搅荞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留红氯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓咕痛,卻偏偏與公主長得像痢甘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子暇检,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容