在小程序開發(fā)中遇到的一些問(wèn)題以及解決方法的經(jīng)驗(yàn),僅供參考
引入iconfont
在小程序中引入字體圖標(biāo)要比web麻煩一些,簡(jiǎn)單說(shuō)需要三步:
下載iconfont,把iconfont.css復(fù)" />

国产精品一区电影_国产男女无遮挡猛进猛出_日本丰满熟妇videossex8k_中文字幕无码乱人伦,久久综合伊人77777麻豆,亚洲最大在线观看,无码人妻久久一区二区三区app

武漢互贏網(wǎng)絡(luò)科技股份有限公司

為企業(yè)創(chuàng)品牌·從營(yíng)銷型網(wǎng)站建設(shè)開始·互贏懂技術(shù)·更懂品牌營(yíng)銷

24小時(shí)熱線

159 7210 9576027-89992189

關(guān)于小程序開發(fā)的一些經(jīng)驗(yàn)

作者:龍 時(shí)間:2018-07-28 瀏覽:

小程序開發(fā)中遇到的一些問(wèn)題以及解決方法的經(jīng)驗(yàn),僅供參考

引入iconfont

在小程序中引入字體圖標(biāo)要比web麻煩一些,簡(jiǎn)單說(shuō)需要三步:

  1. 下載iconfont,把iconfont.css復(fù)制到iconfont.wxss,在app.wxss中引入

  2. 查看iconfont在unicode模式下的在線鏈接,替換iconfont.wxss中的鏈接為遠(yuǎn)程鏈接

  1. 在wxml文件中引入對(duì)應(yīng)的icon class
<icon class="iconfont icon-pay"></icon>
復(fù)制代碼

使用less

vscode有一個(gè)easy less插件,是我感覺(jué)使用less最簡(jiǎn)單的方式

  1. vscode安裝easy less插件

  2. 創(chuàng)建一個(gè)less目錄,用于存放less文件

  3. 文件頭部添加編譯注釋 // out: ../pages/index/index.wxss, compress: true, sourceMap: false

  4. ctrl + s保存后自動(dòng)編譯

編譯后的結(jié)果

按鈕重置

小程序中的按鈕功能強(qiáng)大,很多功能必須要用按鈕,比如彈出用戶授權(quán),調(diào)用客服功能。默認(rèn)的樣式一般無(wú)法滿足需求,可以把按鈕樣式統(tǒng)一重置,然后自己寫樣式

button {
  padding: 0;
  background: #fff;
  line-height: 0;
  &::after {
    border-color: transparent;
  }
}
.button-hover {
  background: #fff;
}
復(fù)制代碼

支持async-await

async-await是ES7的語(yǔ)法,截止我寫這篇文章為止,小程序還是不支持async-await語(yǔ)法的,所以需要使用regenerator這個(gè)庫(kù)

  1. 下載regenerator,并把regenerator-runtime并放到utils目錄下

2. 在util.js引入 import regeneratorRuntime from './regenerator-runtime/runtime-module'
  1. 封裝wxRequest,讓它支持async-await
const wxRequest = async (url, params = {}) => {
  Object.assign(params, {
    token: wx.getStorageSync('token')
  })
  // 所有的請(qǐng)求,header默認(rèn)攜帶token
  let header = params.header || {
    'Content-Type': 'application/json',
    'token': params.token || ''
  }
  let data = params.data || {}
  let method = params.method || 'GET'
  // hideLoading可以控制是否顯示加載狀態(tài)
  if (!params.hideLoading) {
   wx.showLoading({
     title: '加載中...',
   })
  }
  let res = await new Promise((resolve, reject) => {
    wx.request({
      url: url,
      method: method,
      data: data,
      header: header,
      success: (res) => {
        if (res && res.statusCode == 200) {
          resolve(res.data)
        } else {
          reject(res)
        }
      },
      fail: (err) => {
        reject(err)
      },
      complete: (e) => {
        wx.hideLoading()
      }
    })
  })
  return res
}

export {
  wxRequest
}
復(fù)制代碼

使用方法:

import regeneratorRuntime from '../../utils/regenerator-runtime/runtime-module.js'
import {
  wxRequest
} from '../../utils/util.js'

Page({
  data: {
   list:[],
   count: 0,
   page: 1,
   limit: 10
  },
  onLoad: function() {
    this.getList()
    // 請(qǐng)求已經(jīng)結(jié)束 做其他事
  },
  getList: async function() {
    await wxRequest(app.globalData.baseUrl + '/test',{
      hideLoading: true,
      data: {
        limit: this.data.limit,
        page: this.data.page
      }
    }).then((ret) => {
      this.setData({
        list: ret.data.data,
        count: ret.data.num
      })
    })
  }
})
復(fù)制代碼

封裝之后用起來(lái)還是很爽的,擴(kuò)展起來(lái)也方便

動(dòng)態(tài)設(shè)置data中某個(gè)值

應(yīng)用場(chǎng)景:循環(huán)出來(lái)的列表,需要根據(jù)點(diǎn)擊項(xiàng),動(dòng)態(tài)改變列表中對(duì)應(yīng)id的數(shù)據(jù)

// 動(dòng)態(tài)傳遞id
<block wx:for="{{list}}" wx:key="{{index}}">
  <view catch:tap="onChangeName" data-id="{{item.id}}"></view>
</block>

Page({
  data: {
    list:[{
      id: 0,
      name: 'wang'
    },{
      id: 1,
      name: 'li'
    }]
  },
  onChangeName: function(event){
    // 拿到id
   let id = event.target.dataset.id
   let key = `list[${id}].name`, val = 'zhang'
   // 設(shè)置值
   this.setData({
    [key]: val
   })
  }
})
復(fù)制代碼

flex布局,溢出省略號(hào)無(wú)效

訂單列表一般都是左邊一個(gè)圖片,右邊是標(biāo)題或描述。這時(shí)候圖片寬度是固定的,標(biāo)題長(zhǎng)度自適應(yīng)

.wrap {
  display: flex;
}
.sub {
  flex: 1;
  width: 0; // 寬度設(shè)為0
}
.sub text {
  display: block; // 一定要設(shè)置成block
}

<view calss="wrap">
  <image src="i.png"/>
  <view class="sub">
    <text>一段文本一段文本一段文本一段文本一段文本一段文本</text>
    <view>其他</view>
  </view>
</view>
復(fù)制代碼

組件事件傳遞

任務(wù):父組件向子組件傳遞初始數(shù)據(jù),當(dāng)子組件點(diǎn)擊以后可以triggerEvent自定義事件,父組件執(zhí)行自定義事件,重新請(qǐng)求數(shù)據(jù)并傳給子組件

/* 子組件 */
<view>
  <view bind:tap="setId" data-id="1"></view>
</view>

properties: {
  list: {
    type: Array,
    default: []
  }
},

methods: {
  setId(e) {
    let id = e.currentTarget.dataset.id
    this.triggerEvent('deleteFav', id)
  }
}

/* 父頁(yè)面 */
<child bind:customEvent="deleteFav"></child>

data: {
  list: []
},
deleteFav(e) {
  let id = e.detail // 獲取傳遞過(guò)來(lái)的數(shù)據(jù)
  // 根據(jù)id請(qǐng)求數(shù)據(jù),然后重新setData
  let newData = [1,2,3]
  this.setData({
    list: newData
  })
}
復(fù)制代碼

使用wxParse解析HTML

  1. 下載 wxParse ,放到utils目錄下
  2. 在JS頁(yè)面引入: import WxParse from '../../utils/wxParse/wxParse'
Page({
  data:{
    contentHTML:'' // 解析后的HTML
  },
  onLoad: function() {
    // 請(qǐng)求到的HTML數(shù)據(jù)
    let content = '<div>我是HTML代碼</div>', that = this;
    WxParse.wxParse('contentHTML', 'html', content, that, 0);
  }
})

復(fù)制代碼
  1. 顯示解析內(nèi)容
<import src="../../utils/wxParse/wxParse.wxml"/>
<view>
  <!-- 顯示內(nèi)容 -->
  <template is="wxParse" data="{{wxParseData:contentHTML.nodes}}" />
</view>
復(fù)制代碼

圖片等比例

image標(biāo)簽有個(gè)mode屬性,可以設(shè)置圖片如何顯示,如果文檔看的不仔細(xì)還真容易發(fā)現(xiàn)

<image src="test.png" mode="widthFix"/>
復(fù)制代碼

上拉加載和下拉刷新

{
  "onReachBottomDistance": 0,
  "enablePullDownRefresh": true
}
復(fù)制代碼
data: {
  limit: 30,
  page: 1,
  list:[],
  count:0
},
// 下拉
onPullDownRefresh: function () {
  this.setData({
    page: 1,
    list:[]
  })
  this.getData()
},
// 上拉
onReachBottom: function () {
  if(this.data.list.length >= this.data.count) {
    return false
  }
  this.setData({
    page: this.data.page + 1
  })
  this.getData()
  wx.stopPullDownRefresh()
},
getData: async function () {
  await wxRequest(app.globalData.baseUrl + '/test', {
    data: {
      page: this.data.page,
      limit: this.data.limit,
    }
  }).then((ret) => {
    let list = this.data.list.concat(ret.data.list)
    this.setData({
      list: list,
      count: ret.data.count
    })
  })
}
復(fù)制代碼

上傳圖片

任務(wù):小程序上傳圖片到服務(wù)器,最多上傳三張,前端可以刪除圖片

 

使用到的API有兩個(gè):wx.uploadFile wx.chooseImage

示例WXML:

<view class="sale after-pic">
  <block wx:for="{{imgList}}" wx:key="{{index}}">
    <view class="pic">
      <image src="{{item}}" />
      <icon type="clear" size="20" catchtap="clearImg" data-id="{{index}}"/>
    </view>
  </block>
  <image src="../../images/upload.png" catchtap="chooseImage" />
</view>
<button catchtap="onSub">提交</button>
復(fù)制代碼

imgList是wx.chooseImage成功后返回的圖片臨時(shí)地址

示例JS

Page({
  data: {
    imgList:[]
  },
  // 使用async await是因?yàn)閳D片上傳是異步的
  onSub: async function() {
    // 點(diǎn)擊提交后,開始上傳圖片
     let imgUrls = []
     for (let index = 0; index < this.data.imgList.length; index++) {
       await this.uploadFile(this.data.imgList[index]).then((res) => {
         // 這里要注意把res.data parse一下,默認(rèn)是字符串
         let parseData = JSON.parse(res.data)
         imgUrls.push(parseData.data) // 圖片地址
       })
     }
     console.log(imgUrls) // 3張圖片上傳成功后,執(zhí)行其他操作
  },
  // 刪除某張圖片
  clearImg: function (params) {
    let imgList = this.data.imgList
    let id = params.currentTarget.dataset.id // 圖片索引
    imgList.splice(id, 1) // 刪除
    this.setData({
      imgList: imgList
    })
  },
  chooseImage: function (params) {
    wx.chooseImage({
      count: 3, // 做多3張
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        // 存儲(chǔ)臨時(shí)地址
        this.setData({
          imgList: res.tempFilePaths
        })
      }
    })
  },
  uploadFile: function (filePath) {
    // 返回Promise是為了解決圖片上傳的異步問(wèn)題
    return new Promise( (resolve, reject) => {
      wx.uploadFile({
        url: app.globalData.baseUrl + '/file/upload', // 上傳地址
        filePath: filePath,
        name: 'file', // 這里的具體值,問(wèn)后端人員
        formData: {},
        header: {
          "Content-Type": "multipart/form-data"
        },
        success: (res) =>{
          // 圖片上傳成功后,后端會(huì)返回一個(gè)地址,可以把它存到imgUrls
          this.imgUrls.push(res.data.data)
        },
        fail:(err) => {
          console.log(err)
        }
      })
    })
  }
})
復(fù)制代碼

動(dòng)態(tài)標(biāo)題

onLoad的時(shí)候動(dòng)態(tài)設(shè)置標(biāo)題

wx.setNavigationBarTitle({
  title: '新標(biāo)題'
})
復(fù)制代碼



公司名稱:武漢互贏網(wǎng)絡(luò)科技有限公司
公司地址:武漢市武昌區(qū)靜安路6號(hào)創(chuàng)意產(chǎn)業(yè)園401室
客  服QQ:562257562  848467306
咨詢電話:027-89992189
業(yè)務(wù)熱線:15972109576
公司網(wǎng)站:www.xhruiyu.com   www.tlnet8.com   www.whtlnet.com  

 

武漢網(wǎng)站建設(shè)    武漢網(wǎng)站制作    武漢網(wǎng)絡(luò)公司    武漢網(wǎng)站開發(fā)    武漢建網(wǎng)站     小程序開發(fā)

最新動(dòng)態(tài)

常見(jiàn)問(wèn)題百寶箱

全國(guó)服務(wù)熱線

027-89992189

掃一掃關(guān)注微信

Copyright 2013-2020 All Rights Reserved 武漢互贏網(wǎng)絡(luò)科技股份有限公司 鄂ICP備19027860號(hào)

獲取品牌營(yíng)銷方案

快速填寫

馬上獲取

互聯(lián)網(wǎng)低成本創(chuàng)名牌從此開始!

主站蜘蛛池模板: 体育| 保定市| 石家庄市| 连州市| 南部县| 河源市| 抚宁县| 荥经县| 海安县| 临海市| 莱芜市| 合山市| 忻城县| 巴彦县| 都昌县| 肥东县| 大英县| 林州市| 城步| 郑州市| 永顺县| 大兴区| 平邑县| 南陵县| 上林县| 武城县| 嘉荫县| 木兰县| 济南市| 九龙县| 信阳市| 贵溪市| 东乡族自治县| 迁西县| 建水县| 冀州市| 金门县| 江油市| 定西市| 吐鲁番市| 乾安县|