在小程序開發(fā)中遇到的一些問(wèn)題以及解決方法的經(jīng)驗(yàn),僅供參考
引入iconfont
在小程序中引入字體圖標(biāo)要比web麻煩一些,簡(jiǎn)單說(shuō)需要三步:
下載iconfont,把iconfont.css復(fù)" />
您的位置:首頁(yè) > 新聞資訊 > 行業(yè)百科 > 優(yōu)化運(yùn)營(yíng)
在小程序中引入字體圖標(biāo)要比web麻煩一些,簡(jiǎn)單說(shuō)需要三步:
下載iconfont,把iconfont.css復(fù)制到iconfont.wxss,在app.wxss中引入
查看iconfont在unicode模式下的在線鏈接,替換iconfont.wxss中的鏈接為遠(yuǎn)程鏈接
<icon class="iconfont icon-pay"></icon>
復(fù)制代碼
vscode有一個(gè)easy less插件,是我感覺(jué)使用less最簡(jiǎn)單的方式
vscode安裝easy less插件
創(chuàng)建一個(gè)less目錄,用于存放less文件
文件頭部添加編譯注釋 // out: ../pages/index/index.wxss, compress: true, sourceMap: false
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是ES7的語(yǔ)法,截止我寫這篇文章為止,小程序還是不支持async-await語(yǔ)法的,所以需要使用regenerator這個(gè)庫(kù)
import regeneratorRuntime from './regenerator-runtime/runtime-module'
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)也方便
應(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ù)制代碼
訂單列表一般都是左邊一個(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ù)制代碼
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ù)制代碼
<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ù)制代碼
onLoad的時(shí)候動(dòng)態(tài)設(shè)置標(biāo)題
wx.setNavigationBarTitle({
title: '新標(biāo)題'
})
復(fù)制代碼
最新動(dòng)態(tài)
常見(jiàn)問(wèn)題百寶箱
A2014,有位學(xué)妹不顧家人反對(duì),在上海這個(gè)國(guó)際化大都市謀了一個(gè)公眾號(hào)助理的職位。斗志昂揚(yáng)地奮斗了 3 年,我眼看著她的內(nèi)容駕馭能力突飛猛進(jìn),內(nèi)容質(zhì)量從三流到一流,職位
A文章主要分析了不同的視覺(jué)設(shè)計(jì)元素是如何影響網(wǎng)站用戶體驗(yàn),希望通過(guò)文章的解讀能夠?qū)δ愕漠a(chǎn)品設(shè)計(jì)帶來(lái)些啟發(fā)。 也許是因?yàn)槲以谝曈X(jué)設(shè)計(jì)上沒(méi)有太多經(jīng)驗(yàn),我發(fā)現(xiàn)
A雙贏系統(tǒng)建站系統(tǒng),三網(wǎng)同步,建站推廣一步到位雙贏系統(tǒng)建站系統(tǒng),三網(wǎng)同步,建站推廣一步到位雙贏系統(tǒng)建站系統(tǒng),三網(wǎng)同步,建站推廣一步到位雙贏系統(tǒng)建站系統(tǒng),三網(wǎng)同步,建站推
027-89992189
掃一掃關(guān)注微信
Copyright 2013-2020 All Rights Reserved 武漢互贏網(wǎng)絡(luò)科技股份有限公司 鄂ICP備19027860號(hào)