微信小程序基礎(chǔ)知識(shí)總結(jié)

wepy+vant 微信小程序開發(fā)總結(jié)

前言

本次小程序開發(fā)選擇使用 wepy作為小程序第三方框架国拇,在UI組件庫方面選擇的是有贊的移動(dòng)端組件庫Vant去快速搭建小程序應(yīng)用。這次小程序功能需求并不是特別復(fù)雜,目前親測(cè)功能基本滿足。這段時(shí)間剛好工作空閑期,決定將這次開發(fā)的坑以及重要點(diǎn)記錄下來荚板,以備今后查閱。(另外巍糯,與小程序同期還有用vue做的H5 app開發(fā)啸驯,下面會(huì)在部分情況比較二者的區(qū)別!)

wepy準(zhǔn)備工作

全局安裝wePy模塊包

npm install wepy-cli -g

代碼編輯用的一直還是VsCode祟峦,在VsCode編輯器里開發(fā)罚斗,然后通過開啟wepy實(shí)時(shí)編譯,用微信原生開發(fā)者工具實(shí)時(shí)預(yù)覽與調(diào)試宅楞!

wepy build --watch

微信原生開發(fā)者工具使用注意事項(xiàng)

  1. 項(xiàng)目設(shè)置中针姿,關(guān)閉ES6轉(zhuǎn)ES5,上傳代碼時(shí)樣式自動(dòng)補(bǔ)全,開啟不校驗(yàn)合法域名、web-view(業(yè)務(wù)域名)厌衙、TLS 版本以及 HTTPS 證書 距淫。 注意:官網(wǎng)說,應(yīng)當(dāng)關(guān)閉上傳代碼時(shí)自動(dòng)壓縮混淆,否則會(huì)導(dǎo)致部分功能不能正常使用婶希,但我因?yàn)樵?strong>真機(jī)調(diào)試或者預(yù)覽的時(shí)候榕暇,編譯打包失敗超出大小限制還是勾上了,以保證手機(jī)可以正常預(yù)覽調(diào)試。
  2. 使用微信原生開發(fā)者工具實(shí)時(shí)預(yù)覽時(shí),只需導(dǎo)入wepy build 后生成的build目錄即可彤枢!

wepy 基本常見用法總結(jié)

  1. 事件綁定

    原生的bindtap="click" 變成 @tap="click" 狰晚,catchtap="click"變成@tap.stop="click"

  2. 事件傳參
    原來通過自定義data-param變量 :bindtap="click" data-index={{index}}傳參優(yōu)化成:@tap="click('{{index}}')"吃(注:傳遞變量需要加' ' 包裹)

    傳遞多個(gè)變量:@tap="checkedChange('{{item.id}}', '{{index}}')"

  3. wepy使用單文件模式,將原生的page頁面的4個(gè)文件page.js,page.json,page.wxml,page.wxss匯總成一個(gè)page.wpy;app頁面一樣缴啡。

    以page頁面為例壁晒,簡(jiǎn)述wepy優(yōu)化后的頁面代碼結(jié)構(gòu):

    <template>
        <view>
            ... 我是html部分
        <view>
    </template>
            
    <script>
      import wepy from 'wepy';
      import HomoloStep from '../../components/HomoloStep';
      export default class PayResult extends wepy.page {
        config = {
          navigationBarBackgroundColor: '#447BC9',  // 此處設(shè)置相當(dāng)于page.json內(nèi)容,定義頁頭
          navigationBarTitleText: '支付結(jié)果',
          navigationBarTextStyle: 'white',
          usingComponents: {  // 引入的第三方UI組件庫vant
            'van-button': '../../components/van/button/index'
          }
        };
        // 此處注冊(cè)自己封裝的公共組件
        components = {
            'HomoloStep': HomoloStep 
        }
        data = {
            show: false,
            ...
        };
        // methods 里面只負(fù)責(zé)寫頁面交互相關(guān)的方法业栅,比如:@tap...
        methods = {
            ...
        };
        // 無交互的事件秒咐,自己寫的一些初始方法挪出methos,保持于methods同級(jí)碘裕!
        getNotaryOffices () {
        }
        // 初始化生命周期携取,加載頁面數(shù)據(jù)
        onLoad () {
         this.getNotaryOffices()
        }
      }
    </script>
            
    <style lang='less' scoped>
        ...
    </style>
    
  4. 數(shù)據(jù)更新

    原生使用this.setData({title: 'this is title'});的形式更新數(shù)據(jù),wepy優(yōu)化為:this.title = 'this is title'娘汞。

    注意:在異步更新數(shù)據(jù)歹茶,接口返回?cái)?shù)據(jù)前端對(duì)數(shù)據(jù)做復(fù)雜forEach操作夕玩,或者比如刪除操作成功很久了你弦,視圖才減少掉等等...各種數(shù)據(jù)更新,頁面沒有更新的情況燎孟,都可以使用this.$apply()方法禽作,觸發(fā)臟數(shù)據(jù)檢查,使頁面強(qiáng)制更新揩页!

  5. img屬性綁定區(qū)別

    這里沒有為什么旷偿,就想特別記錄一下image標(biāo)簽的src綁定區(qū)別:

    用vue 寫的h5 APP時(shí)是這樣的:

    <img :src="environment.restServiceUrl +'tk.File/' +unUploadItem.fileId +'/view'">
    

    并且:vue這邊,要想在data數(shù)據(jù)里面直接寫入img的src本地圖片路徑爆侣,需要使用requie('../../bg.png')

    defaultOfficeBg: require("@/assets/images/office-default.png")
    

    微信小程序是這樣的...

    <image src="{{item.img}}" />
    

    注: 小程序無法在樣式style中萍程,直接使用background-image 去加載本地圖片,只能用網(wǎng)絡(luò)url或者base64的形式 兔仰;要想使用本地圖片要用image標(biāo)簽才行茫负。

  6. 動(dòng)態(tài)樣式

    // 寫法一: 
    <ul class="search-history {{isShowMore ? 'search-history-more' : ''}} {{...}}"></ul>
    // 寫法二:
    <view class="m-select-group-item" :class="{'m-select-group-item--active': activeIdx === index}"></view>
    
  7. 數(shù)據(jù)循環(huán) , 條件判斷

    小程序這邊數(shù)據(jù)循環(huán),我因?yàn)閷懛ǖ拇笠夂醺埃攘艘粋€(gè)坑忍法,這邊特別記錄一下:

    // 特別設(shè)置key,item 屬性的時(shí)候,注意沒有{{}}榕吼,并且 wx:key就可以啦饿序,沒有for-前綴
    <view wx:for="{{offices}}" wx:key="item.id" wx:for-item="item">
     {{item.name}} ...
    </view>
    
    // 小程序條件判斷
    <view wx:if="{{ident.result === '同一人'}}">...</view>
    <view wx:elif="{{ident.result === '非同一人'}}">...</view>
    <view wx:else>...</view>
    // vue 這邊是直接 v-if... v-else 即可
    
  8. 組件封裝使用

    組件引用:父組件script中,先import引用子組件羹蚣,然后在components對(duì)象中給組件聲明唯一的組件ID原探,接著在template中,用聲明的組件ID所命名的自定義標(biāo)簽插入組件。

    <template>
        <!-- 以`<script>`腳本部分中所聲明的組件ID為名命名自定義標(biāo)簽咽弦,從而在`<template>`模板部分中插入組件 -->
        <child></child>
    </template>
    
    <script>
        import wepy from 'wepy';
        //引入組件文件
        import Child from '../components/child';
        export default class Index extends wepy.page {
            //為兩個(gè)相同組件的不同實(shí)例分配不同的組件ID告匠,從而避免數(shù)據(jù)同步變化的問題
            components = {
                child: Child,
                anotherchild: Child
            };
        }
    </script>
    

    props 父子組件傳值:與vue一樣,包括靜態(tài)傳值動(dòng)態(tài)傳值离唬。

    靜態(tài)傳值:父組件給子組件傳遞常量數(shù)據(jù) String類型(不需要加:

    <homolo-select-translate placeholder="請(qǐng)選擇翻譯語種"></homolo-select-translate>
    

    動(dòng)態(tài)傳值:父組件向子組件傳遞動(dòng)態(tài)數(shù)據(jù)(需要加::)后专,可以通過使用.sync修飾符達(dá)到父組件數(shù)據(jù)綁定至子組件,也可以通過設(shè)置twoWay:true達(dá)到子組件數(shù)據(jù)綁定至父組件的效果输莺。兩者同時(shí)使用戚哎,可以實(shí)現(xiàn)雙向綁定

    <homolo-select-translate :list.sync="translateLists" :id.sync="translateId"></homolo-select-translate>
    
    export default class HomoloSelect extends wepy.component {
     props = {
       list: { // 父組件向子組件單向傳值嫂用,有.sync修飾符的props屬性值型凳,當(dāng)在父組件中改變時(shí),會(huì)同時(shí)改變子組件對(duì)應(yīng)的值
         type: Array,
         default: []
       },
       id: {
         type: String,
         default: undefined,
         twoWay: true  // 子組件props中的屬性值改變時(shí)嘱函,會(huì)同時(shí)改變父組件對(duì)應(yīng)的值
       },
       placeholder: String // 靜態(tài)傳值
     }
    };
    

    組件通信交互

    $emit:子組件向父組件通信交互 甘畅。(暫時(shí)只用過這種...)

    $broadcast: 父組件向所有子組件通信。

    $invoke: 是一個(gè)頁面或組件對(duì)另一個(gè)組件中的方法的直接調(diào)用往弓,通過傳入組件路徑找到相應(yīng)的組件疏唾,然后再調(diào)用其方法。

  9. 請(qǐng)求封裝

    wepy框架wepy.request() 默認(rèn)對(duì)所有的小程序提供的API進(jìn)行了promise處理函似。支持promise槐脏,但是需要手動(dòng)開啟promise的支持

    wxRequest.js頁面:

    import wepy from 'wepy';
    
    const request = (url, config = {}) => {
      return wepy.request({
        url: url,
        data: Object.assign({}, config.data, wepy.$instance.globalData.tokenId ? {personId: wepy.$instance.globalData.tokenId} : {}) || {}, // 每次請(qǐng)求data中攜帶固定的參數(shù)
        method: config.method || 'GET',
        dataType: config.dataType || 'json',
        header: config.header || {
          'Content-Type': 'application/json',
          'X-CSRF-TOKEN': wepy.$instance.globalData.CSRF_TOKEN, // 自定義js文件獲取globalData的全局變量
        }
      })
    }
    
    export default {
      request
    }
    

小程序授權(quán)撇寞,登陸流程

暫時(shí)項(xiàng)目進(jìn)度顿天,還沒有特別完善的登陸流程。后續(xù)蔑担,看情況再更新牌废。。啤握。暫時(shí)記錄一下鸟缕,關(guān)于授權(quán),登陸的注意點(diǎn):

  1. 授權(quán)方面:

    如果想通過wx.getUserInfo()獲取用戶信息恨统,需要先走授權(quán)叁扫。可以使用 wx.getSetting 獲取用戶當(dāng)前的授權(quán)狀態(tài)畜埋。

    向用戶發(fā)起授權(quán)窗口請(qǐng)使用:<button open-type="getUserInfo">

    <button open-type="getUserInfo" bindgetuserinfo="onGotUserInfo">獲取用戶信息</button>
      
    <script>
        onGotUserInfo(e) {
          console.log(e.detail.userInfo)
          wx.getSetting({
            success (res) {
              if (res.authSetting['scope.userInfo']) {
                wx.redirectTo({url: './login-register/login'})
              } else {
                  ...
              }
            }
          })
        },
    </script>
    
  2. 登陸流程

    menu.saveimg.savepath20190329134012.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末莫绣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悠鞍,更是在濱河造成了極大的恐慌对室,老刑警劉巖模燥,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異掩宜,居然都是意外死亡蔫骂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門牺汤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辽旋,“玉大人,你說我怎么就攤上這事檐迟〔古撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵追迟,是天一觀的道長(zhǎng)溶其。 經(jīng)常有香客問我,道長(zhǎng)敦间,這世上最難降的妖魔是什么瓶逃? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮廓块,結(jié)果婚禮上厢绝,老公的妹妹穿的比我還像新娘。我一直安慰自己剿骨,他們只是感情好代芜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布埠褪。 她就那樣靜靜地躺著浓利,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钞速。 梳的紋絲不亂的頭發(fā)上贷掖,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音渴语,去河邊找鬼苹威。 笑死,一個(gè)胖子當(dāng)著我的面吹牛驾凶,可吹牛的內(nèi)容都是我干的牙甫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼调违,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼窟哺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起技肩,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤且轨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旋奢,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泳挥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了至朗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屉符。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锹引,靈堂內(nèi)的尸體忽然破棺而出筑煮,到底是詐尸還是另有隱情,我是刑警寧澤粤蝎,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布真仲,位于F島的核電站,受9級(jí)特大地震影響初澎,放射性物質(zhì)發(fā)生泄漏秸应。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一碑宴、第九天 我趴在偏房一處隱蔽的房頂上張望软啼。 院中可真熱鬧,春花似錦延柠、人聲如沸祸挪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贿条。三九已至,卻和暖如春增热,著一層夾襖步出監(jiān)牢的瞬間整以,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工峻仇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留公黑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓摄咆,卻偏偏與公主長(zhǎng)得像凡蚜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吭从,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • 開源項(xiàng)目 wepy-wechat-demo:基于wepy開發(fā)的仿微信聊天界面小程序 深大的樹洞:基于wepy開發(fā)的...
    dufebin閱讀 4,104評(píng)論 0 19
  • 因新工作主要負(fù)責(zé)微信小程序這一塊朝蜘,最近的重心就移到這一塊,該博客是對(duì)微信小程序整體的整理歸納以及標(biāo)明一些細(xì)節(jié)點(diǎn)影锈,初...
    majun00閱讀 7,315評(píng)論 0 9
  • 簡(jiǎn)介 微信小程序入門門檻低芹务、開發(fā)周期短蝉绷、代碼編寫靈活、傳播速度快等優(yōu)點(diǎn)讓微信小程序迅速火爆枣抱,開發(fā)者紛紛涌入熔吗,任何語...
    大公爵閱讀 4,127評(píng)論 0 10
  • Feeling a pure delight. 中午沒睡覺,太困了佳晶! 早上學(xué)習(xí)打卡了桅狠,but晚上沒鍛煉. 是否可以...
    W大步溜閱讀 404評(píng)論 0 0
  • 蔬食衛(wèi)生 肉食傷生 殺時(shí)恨心 其毒非輕 勿貪吃肉 吃了須還 還的時(shí)候 真?zhèn)€可憐
    釋凈意閱讀 195評(píng)論 0 1