uni-app 踩坑之路(長(zhǎng)期更新)

資料

uni-app 官網(wǎng)

正文

1. 基本創(chuàng)建并啟動(dòng)工程操作

原文地址

  • 項(xiàng)目的創(chuàng)建
    # 全局安裝腳手架的兩種方式
    npm install -g @vue/cli
    # OR
    yarn global add @vue/cli
    
    # 新建工程 => 選擇`默認(rèn)模板`即可
    vue create -p dcloudio/uni-preset-vue my-project
    
  • 項(xiàng)目的啟動(dòng)(本地啟動(dòng)微信小程序服務(wù))
    # 本地啟動(dòng)微信小程序服務(wù)
    yarn dev:mp-weixin
    
  • 之后手動(dòng)在微信開發(fā)者工具中導(dǎo)入該項(xiàng)目戈泼,一次選中 my-project => dist => dev => mp-weixin 目錄點(diǎn)擊確定即可

2. 安裝 sass-loader 之后居灯,由于版本過高刺彩,導(dǎo)致報(bào)錯(cuò)無法成功編譯

3. 微信小程序底部的 icon

  1. icon 尺寸需要是 81*81 的碗短,不然會(huì)非常模糊

參考文章:小程序底部的tabbar圖片顯示老是會(huì)模糊受葛,不管放多大的圖都模糊题涨,什么原因

  • 對(duì)比圖


    對(duì)比圖.png
  1. icon 的周圍要適當(dāng)?shù)牧舭踪怂荒苋刻顫M,不然不好看
  • 示意圖纲堵,如下所示對(duì)比非常的明顯
示意圖.png

4. 微信小程序相關(guān)的語(yǔ)法巡雨,在應(yīng)用中中需要注意的地方

  1. image 標(biāo)簽高度隨寬度自適應(yīng)

    <image mode="widthFix" />
    
  2. image 標(biāo)簽寬高自適應(yīng)鋪滿,但是會(huì)裁切掉部分的圖片

    <image mode="aspectFill" />
    
  3. scroll-view 頁(yè)面下拉滾動(dòng)組件

    <template lang="pug">
        scroll-view.home(@scrolltolower="handelToLower" scroll-y)
    </template>
    
    <script>
        export default {
            methods: {
                /**
                * 頁(yè)面內(nèi)容滾動(dòng)到底部 回調(diào)函數(shù)
                */
                handelToLower() {
                   console.log("到底部啦席函!");
                }
            },
        }
    </script>
    
    • scss 需要特殊設(shè)置
      .home {
      // 小程序使用
      height: 100vh;
      // #ifdef  H5
      // 減去頂部標(biāo)題和底部導(dǎo)航的高度铐望,與微信小程序保持一致,會(huì)覆蓋上方的設(shè)置
      height: calc(100vh - 44px - 50px);
      }
      
    • 當(dāng)內(nèi)部?jī)?nèi)容有 flex 布局的話茂附,需要在屬性中增加 enable-flex正蛙,否則無效
  4. swiper 輪播圖組件

    <template lang="pug">
        swiper(autoplay indicator-dots circular)
            swiper-item(v-for='item in bannerList' :key="item.url")
            image(:src="item.url")
    </template>
    
    <script>
        export default {
            data() {
                return {
                    bannerList: [
                        {
                        url:
                            "https://img.alicdn.com/tfs/TB1g4DmcggP7K4jSZFqXXamhVXa-520-280.jpg_q90_.webp"
                        },
                        {
                        url:
                            "https://img.alicdn.com/simba/img/TB13oCCSpXXXXctaXXXSutbFXXX.jpg"
                        },
                        {
                        url:
                            "https://img.alicdn.com/simba/img/TB1b2svaODsXe8jSZR0SutK6FXa.jpg"
                        },
                        {
                        url:
                            "https://img.alicdn.com/simba/img/TB1x3imuXY7gK0jSZKzSuuikpXa.jpg"
                        },
                        {
                        url:
                            "https://img.alicdn.com/tfs/TB18NsRcsVl614jSZKPXXaGjpXa-520-280.jpg_q90_.webp"
                        }
                    ]
                };
            }
        };
    </script>
    
    • scss 需要特殊處理一下
      .swiper-content {
      swiper {
          // 1.9 是 banner 圖片的寬高比例 520/280 = 1.8571428571428572
          height: calc(750rpx / 1.9);
          image {
          height: 100%;
          }
      }
      }
      
  5. uni-segmented-control 分段器組件

    <template lang="pug">
        .home-tab
            .tab-title-list
            uni-segmented-control(:current="current" :values="items.map(v => v.title)" @clickItem="onClickItem" style-type="text" active-color="#2b7bff")
            .tab-title-search
        .home-content
            home-recommend(v-if="current === 0")
            home-category(v-if="current === 1")
            home-new(v-if="current === 2")
            home-album(v-if="current === 3")
    </template>
    
    <script>
        import homeAlbum from "@/pages/home/home-album";
        import homeCategory from "@/pages/home/home-category";
        import homeNew from "@/pages/home/home-new";
        import homeRecommend from "@/pages/home/home-recommend";
        import { uniSegmentedControl } from "@dcloudio/uni-ui";
        export default {
            components: {
                homeAlbum,
                homeCategory,
                homeNew,
                homeRecommend,
                uniSegmentedControl
            },
            data() {
                return {
                    items: [
                        {
                        title: "推薦"
                        },
                        {
                        title: "分類"
                        },
                        {
                        title: "最新"
                        },
                        {
                        title: "專輯"
                        }
                    ],
                    current: 0
                };
            },
            methods: {
                /**
                * tab 切換 回調(diào)函數(shù)
                */
                onClickItem(e) {
                    if (this.current !== e.currentIndex) {
                        this.current = e.currentIndex;
                    }
                }
            }
        };
    </script>
    
  6. navigator 鏈接跳轉(zhuǎn)功能

    <template lang="pug">
        navigator(url="/pages/home/home-album/details")
            text 測(cè)試
    </template>
    

    這個(gè)跳轉(zhuǎn)的地址與 pages.json 中設(shè)置的 pages => path 屬性值保持一致。需要注意的是:不可以和 tabBar 中使用的 pagePath 一致营曼,否則無效乒验。

  7. text 標(biāo)簽可以識(shí)別數(shù)據(jù)中的轉(zhuǎn)義字符,如 \n 會(huì)識(shí)別為換行符

  8. video 標(biāo)簽

    • 視頻預(yù)覽圖充滿整個(gè)容器的屬性蒂阱,默認(rèn)是正常的比例展示的
      objectFit="fill"
      
  9. button 標(biāo)簽

    • 設(shè)置分享锻全,使用微信小程序的內(nèi)置功能
      button(open-type="share") 分享
      

5. 為 H5 方式的服務(wù)狂塘,設(shè)置代理,防止瀏覽器攔截接口請(qǐng)求

  1. manifest.json 文件鳄厌,增加 h5特有相關(guān) 配置
    /* h5特有相關(guān) */
    "h5": {
        "devServer": {
            "port": 8000, //端口號(hào)
            "disableHostCheck": true,
            "proxy": {
                "/api": {
                    "target": "http://xxxx.cn", //目標(biāo)接口域名
                    "ws": true, // proxy websockets
                    "changeOrigin": true, //是否跨域
                    "pathRewrite": {
                        "^/api": ""
                    }
                }
            }
        }
    }
    
  • 使用演示
    wx.request({
    url: "api/xxxxx",
    success(res) {
        console.log(res)
    }
    })
    
  1. 需要注意的是荞胡,這樣寫微信小程序是不會(huì)識(shí)別的,所以還需要使用官方文檔中的 條件編譯 的方式來進(jìn)行處理了嚎,下文中可查看具體的使用方式

6. 使用 條件編譯 的方式泪漂,對(duì)某個(gè)平臺(tái)單獨(dú)設(shè)置

  1. 完善上方接口請(qǐng)求方式
  • main.js 文件,增加全局變量(也可以在 APP.vue 文件中使用 globalData 的方式增加全局變量)
    // 條件編譯歪泳,設(shè)置相應(yīng)環(huán)境的變量值 https://uniapp.dcloud.io/platform?id=%e6%9d%a1%e4%bb%b6%e7%bc%96%e8%af%91
    // #ifdef  MP-WEIXIN
    // 接口請(qǐng)求地址
    Vue.prototype.APINAME = "http://xxx.cn"
    // #endif
    
    // #ifdef  APP-PLUS || H5
    // 使用 manifest.json 中的 devServer 代理配置窖梁,防止瀏覽器阻攔接口請(qǐng)求
    Vue.prototype.APINAME = "api"
    // #endif
    
  • 使用演示
    wx.request({
    url: `${this.APINAME}/xxxxx`,
    success(res) {
        console.log(res)
    }
    })
    
  1. 在樣式代碼中使用條件編譯

    由于 100vh 在微信小程序和 H5 兩個(gè)環(huán)境中不一樣的問題,才有了這樣的需求

    .home {
    // 小程序使用
    height: 100vh;
    // #ifdef  H5
    // 減去頂部標(biāo)題和底部導(dǎo)航的高度夹囚,與微信小程序保持一致纵刘,會(huì)覆蓋上方的設(shè)置
    height: calc(100vh - 44px - 50px);
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荸哟,隨后出現(xiàn)的幾起案子假哎,更是在濱河造成了極大的恐慌,老刑警劉巖鞍历,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舵抹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡劣砍,警方通過查閱死者的電腦和手機(jī)惧蛹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刑枝,“玉大人香嗓,你說我怎么就攤上這事∽俺” “怎么了靠娱?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掠兄。 經(jīng)常有香客問我像云,道長(zhǎng),這世上最難降的妖魔是什么蚂夕? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任迅诬,我火速辦了婚禮,結(jié)果婚禮上婿牍,老公的妹妹穿的比我還像新娘侈贷。我一直安慰自己,他們只是感情好牍汹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布铐维。 她就那樣靜靜地躺著柬泽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嫁蛇。 梳的紋絲不亂的頭發(fā)上锨并,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音睬棚,去河邊找鬼第煮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抑党,可吹牛的內(nèi)容都是我干的包警。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼底靠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼害晦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暑中,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤壹瘟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鳄逾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稻轨,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年雕凹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了殴俱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枚抵,死狀恐怖线欲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俄精,我是刑警寧澤询筏,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布榕堰,位于F島的核電站竖慧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逆屡。R本人自食惡果不足惜圾旨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魏蔗。 院中可真熱鬧砍的,春花似錦、人聲如沸莺治。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至床佳,卻和暖如春滋早,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砌们。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工杆麸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浪感。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓昔头,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親影兽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揭斧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355