以下是微信小程序開發(fā)過程中常見問題,如果您有新的補(bǔ)充可在樓下回復(fù)哦,如果本帖內(nèi)容有誤,請回復(fù),十分感謝!
1、問:請問一下,首次打開的時(shí)候會(huì)出現(xiàn)一個(gè)選擇界面,進(jìn)行選擇之后進(jìn)入主頁,下次再打開就不再顯示這個(gè)選擇界面,直接顯示主頁,這個(gè)應(yīng)該怎么實(shí)現(xiàn)呢?如果在一個(gè)空界面直接進(jìn)行跳轉(zhuǎn),初次打開的時(shí)候空白界面會(huì)先顯示一下,才會(huì)跳轉(zhuǎn)對應(yīng)的界面,這應(yīng)該怎么處理呢?
答:目前首頁的設(shè)置,默認(rèn)是在app.json的pages的第一個(gè)頁面。
每次重啟打開都會(huì)顯示這么頁面。
如果想要一個(gè)選擇頁面并且沒有停頓體驗(yàn)的話,可以在首頁上添加額外的view層來解決,一次顯示,之后display設(shè)置none,顯示與否可以在本地存儲(chǔ)一個(gè)標(biāo)識(shí)。
2、問:使用ffmpeg 將silk轉(zhuǎn)mp3失敗,哪位大神成功過的,辛苦給下思路,不勝感激!
答:用的gitHub上面的decoder開源庫,先解碼silk,再轉(zhuǎn)MP3 https://github.com/kn007/silk-v3-decoder
3、問:微信小程序 navigateTo 只能使用五次 五次之后無效 怎么處理的?
答:不是只能跳轉(zhuǎn)5次,而是跳轉(zhuǎn)層次只能是5層,注意理解。 頁面一層一層往里跳進(jìn),最多5層。是這個(gè)意思。
4、問:微信小程序中能否用js更改app.js中的globalData?怎么實(shí)現(xiàn)?不能更改的話怎么實(shí)現(xiàn)在當(dāng)前頁面中設(shè)置一個(gè)屬性,在另一個(gè)頁面中也能顯示出來?
答:可以修改啊,globalData只是設(shè)置在app.js 的一個(gè)object數(shù)據(jù),你可以直接改的。 比如:
在globalData里有一個(gè)users = ['張三', '李四'];
在任意一個(gè)js里可以修改:getApp().globalData.users = ['王五', '趙六'];
5、問:php自己的session是用來判斷用戶是否登錄的,windows+apache的話,小程序的session咋存儲(chǔ)。是存儲(chǔ)到數(shù)據(jù)庫中???還是哪???wx.login中的code哪個(gè)是用戶的唯一標(biāo)識(shí)?是openid嗎??
答:小程序在本地存儲(chǔ)一個(gè)秘鑰,每次請求的時(shí)候帶過去,服務(wù)端校驗(yàn)這個(gè)秘鑰,如果合法,返回成功和對應(yīng)的數(shù)據(jù)。
6、問:Swiper插件使用問題
答:感覺沒辦法,組件的體驗(yàn)需要微信的優(yōu)化,組件都是封裝好的改不了
7、問:小程序里的console在wing工具哪里看
答:點(diǎn)擊調(diào)試即可。
8、問:之前已認(rèn)證的公眾號(hào)不能用作開發(fā)小程序嗎?
答:小程序是和訂閱號(hào)、服務(wù)號(hào)以及企業(yè)號(hào)平行的新類型,所以需要在微信公眾平臺(tái)申請一個(gè)新的小程序號(hào),需要重新認(rèn)證。
9、問:特別好奇 微信小程序能不能支持發(fā)送圖標(biāo)到桌面這個(gè)功能
答:安卓應(yīng)該可以,蘋果不行
10、問: 微信小程序沒有提供webview組件嗎?
答:首先微信內(nèi)跳轉(zhuǎn)普通H5頁面時(shí),跳轉(zhuǎn)地址是需要在國內(nèi)備案的,否則會(huì)有警告提示。 以微信的尿性,我個(gè)人估計(jì)小程序是不會(huì)提供webview組件讓你自由加載第三方頁面的,安全考慮。
11、問:<view wx:if"{{list}}"> list是數(shù)組,怎么判斷條數(shù)為0
答:你說的是條件渲染嗎? 也可以<view wx:if="{{list.length == 0}}"> </view>
可以在 {{}} 內(nèi)進(jìn)行簡單的運(yùn)算,包括三元運(yùn)算符、邏輯判斷、算數(shù)運(yùn)算
12、問:想開發(fā)一個(gè)社交小程序 程序里面產(chǎn)生動(dòng)態(tài)能提示用戶么?
答:微信的概念是不打擾用戶,肯定不能隨便給用戶彈消息,但是有模板消息 是專門做消息通知的。
13、問:想做個(gè)本地垂直類的服務(wù)型項(xiàng)目。小程序試用嗎
答:非常適合,試水成本也不高
14、問:怎么讓<swiper>充滿整個(gè)屏幕啊
答:寬高都設(shè)置為100%,試試看
15、問:微信小程序如何被用戶打開,并且是自動(dòng)獲取用戶的ID和頭像的么?就是說我做了一個(gè)叫大姨嗎的微信小程序,可是我怎么讓別人發(fā)現(xiàn)這個(gè)小程序,并且登錄注冊進(jìn)去呢?
答:目前只是開放公測階段,并沒有正式上線。關(guān)于小程序的入口,除了分享二維碼外,還有想象空間~獲取用戶信息,需要代碼調(diào)用api。先調(diào)用wx.login 然后wx.getUserInfo 就可以獲得用戶的名稱和頭像了。這過程對用戶來說是透明的。
示例代碼:
wx.getUserInfo({
success: function(res) {
var userInfo = res.userInfo
var nickName = userInfo.nickName
var avatarUrl = userInfo.avatarUrl
var gender = userInfo.gender //性別 0:未知、1:男、2:女
var province = userInfo.province
var city = userInfo.city
var country = userInfo.country
}
})
16、問:微信小程序多個(gè)組件動(dòng)畫,官方教程上都是單個(gè)組件的動(dòng)畫比如
var animation = wx.createAnimation({
duration: 1000,
timingFunction: "ease",
delay: 2000
})
this.animation = animation
animation.scale(1).step();
this.setData({
AvatarShow:animation.export()
})
<image class="avatar" animation="{{AvatarShow}}" src="{{userInfo.avatarUrl}}"></image>
17、這樣的,但是我想讓這個(gè)動(dòng)畫執(zhí)行完畢了以后,控制
<text class="userinfo-nickname">歡迎您:{{userInfo.nickName}}</text>
其他的組件做動(dòng)畫效果應(yīng)該怎么做呢?
答:rotateThenScale: function() {
this.animation.rotate(Math.random() * 720 - 360).step()
.scale(Math.random() * 2).step()
this.setData({ animation: this.animation.export() })
setTimeout(function() {
this.animation2.rotate(Math.random() * 720 - 360).step()
.scale(Math.random() * 2).step()
this.setData({ animation2: this.animation2.export() })
}.bind(this), 3000)
},
比如這個(gè)是我修改的官網(wǎng)示例,animation不同就可以控制不同的組建了,這個(gè)相當(dāng)于獲取了界面元素
18、問:我想在首頁頂部導(dǎo)航上添加一個(gè)按鈕,點(diǎn)擊后跳轉(zhuǎn)到另外一個(gè)頁面。請問怎么實(shí)現(xiàn),謝謝了
答:微信小程序有相關(guān)的API:
wx.navigateTo(OBJECT)
保留當(dāng)前頁面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁面,使用wx.navigateBack可以返回到原頁面。
OBJECT參數(shù)說明:
參數(shù) 類型 必填 說明
url String 是 需要跳轉(zhuǎn)的應(yīng)用內(nèi)頁面的路徑 , 路徑后可以帶參數(shù)。參數(shù)與路徑之間使用?分隔,參數(shù)鍵與參數(shù)值用=相連,不同參數(shù)用&分隔;如 'path?key=value&key2=value2'
success Function 否 接口調(diào)用成功的回調(diào)函數(shù)
fail Function 否 接口調(diào)用失敗的回調(diào)函數(shù)
complete Function 否 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)
示例代碼:
wx.navigateTo({
url: 'test?id=1'
})
//test.js
Page({
onLoad: function(option){
console.log(option.query)
}
})
注意:為了不讓用戶在使用小程序時(shí)造成困擾,我們規(guī)定頁面路徑只能是五層,請盡量避免多層級(jí)的交互方式。
wx.redirectTo(OBJECT)
關(guān)閉當(dāng)前頁面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁面。
OBJECT參數(shù)說明:
參數(shù) 類型 必填 說明
url String 是 需要跳轉(zhuǎn)的應(yīng)用內(nèi)頁面的路徑
success Function 否 接口調(diào)用成功的回調(diào)函數(shù)
fail Function 否 接口調(diào)用失敗的回調(diào)函數(shù)
complete Function 否 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)
示例代碼:
wx.redirectTo({
url: 'test?id=1'
})
wx.navigateBack(OBJECT)
關(guān)閉當(dāng)前頁面,返回上一頁面或多級(jí)頁面??赏ㄟ^ getCurrentPages()) 獲取當(dāng)前的頁面棧,決定需要返回幾層。
OBJECT參數(shù)說明:
參數(shù) 類型 默認(rèn)值 說明
delta Number 1 返回的頁面數(shù),如果 delta 大于現(xiàn)有頁面數(shù),則返回到首頁。
舉個(gè)例子:
點(diǎn)擊一個(gè)按鈕后跳轉(zhuǎn)
buttonClick:function(e){
var agrs ='我是參數(shù)';
wx.navigateTo({
url: '../order/order?order=' + agrs
})
},
其中的URL是工程里目標(biāo)頁面的相對路徑。
至于你說的導(dǎo)航條左上角的按鈕,需要自己去做UI,以上是邏輯層面的
19、問:關(guān)于php無法接收微信小程序POST傳參
答:剛剛開始按照微信官方的方法寫了一個(gè)POST傳參,后臺(tái)使用php進(jìn)行解析入庫。
但是突然發(fā)現(xiàn)GET能接收到傳參,但是后臺(tái)$_POST死活都沒辦法進(jìn)行傳參。
wx.request({
url: 'http://localhost/XXX.php',
data: {
menu: data.detail.value.menu ,
},
/*header: {
'content-type': 'application/json'
},*/
method:'post',
success: function(res) {
console.log(res.data)
}
})
查了資料,都說是
'content-type': 'application/json'
大小寫的問題。但是我把它改成小寫了還是不行。
后來仔細(xì)研究了發(fā)現(xiàn),微信小程序通過POST的不是字符串,而是JSON信息,所以在后臺(tái)是無法直接用$_POST進(jìn)行解析的。
這個(gè)是我們正常POST信息瀏覽器對后臺(tái)文件發(fā)送的post信息
這個(gè)是小程序POST的信息,所以我們就要處理一下才行了
php獲取信息如下:
$menu = file_get_contents('php://input');
$val = json_decode($menu,true);
echo($val['menu']);
把json轉(zhuǎn)換成數(shù)組以后就可以正常的進(jìn)行數(shù)據(jù)處理了!
20、問:小程序 post 參數(shù)一直進(jìn)不去 服務(wù)器端沒接收到。
答:我試了下,php框架使用ThinkPhP。請求代碼:
wx.request({
url: 'http://localhost/api/getList',
data: {lastid:lastid,limit:limit},
header: {
'Content-Type': 'application/json'
},
method:'post',
success: function(res) {
var cc = res.data;
},
fail: function(res){ },
complete: function(){ }
})
post數(shù)據(jù):
后臺(tái)代碼(查詢后返回,使用ajaxReturn返回?cái)?shù)據(jù)到前端):
function getList(){
$list = M('mmc')->field('id,title,img,cTime')->limit($limit)->select();
$this->ajaxReturn($list);
}
前端接收到的數(shù)據(jù)(success函數(shù)回調(diào)的res):
21、問:微信小程序的用戶信息可以做登錄嗎?請問小程序的用戶信息可以做登錄嗎,只有頭像和昵稱,都沒有唯一標(biāo)識(shí)
答:獲取微信信息有唯一標(biāo)識(shí)
這個(gè)應(yīng)該是要和后臺(tái)配合,自己生成一個(gè)session作為唯一標(biāo)示,不能用openid
22、問:微信的check方法里面的參數(shù)是什么?
答:
23、問:在微信小程序里面能直接訪問外部鏈接么
答:
微信小程序暫不支持加外部鏈接。會(huì)屏蔽所有<a>標(biāo)簽。
24、問:怎么自動(dòng)給每個(gè)新頁面都添加一個(gè)固定的浮層?手動(dòng)用template引入肯定是可以的
答:
才疏學(xué)淺,能想到的只是調(diào)用模板。
定義模板
使用name屬性,作為模板的名字。然后在<template/>內(nèi)定義代碼片段,如:
<template name="msgItem">
<view>
<text> Time: {{time}} </text>
</view>
</template>
使用模板
使用 is 屬性,聲明需要的使用的模板,然后將模板所需要的 data 傳入,如:
<template is="msgItem" data="{{...item}}"/>
Page({
data: {
item: {
time: '2016-09-15'
}
}
})
25、問:進(jìn)到一個(gè)頁面,校驗(yàn)登錄,失敗,跳登錄頁;直接執(zhí)行navigateTo或者redirectTo,調(diào)試器是可以正常工作的,但是手機(jī)端不可以,可以加定時(shí)器緩解,但是好像還是沒法根治,在onlunch,onShow,onload都試過,都不怎么好用,請問問題出在哪里?
答:
試試onReady。
onReady Function 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
這才是頁面渲染完畢的回調(diào)。
26、問:小程序里可以用iconfont之類的圖標(biāo)字體嗎?
答:
一般web開發(fā)定義樣式的話,有:外部樣式,內(nèi)部樣式,內(nèi)聯(lián)樣式。
顯然小程序沒有提供link、style標(biāo)簽,所以定義樣式的地方只有wxss文件里和內(nèi)聯(lián)樣式。
小程序API明確規(guī)定:本地資源無法通過 css 獲取。在wxss加載外部字體庫目前測試也是不生效的。
建議:background-image:可以使用網(wǎng)絡(luò)圖片,或者 base64,或者使用<image/>標(biāo)簽。
小圖標(biāo)直接轉(zhuǎn)成base64,直接寫在代碼里,體積也很小,還方便。圖標(biāo)可以統(tǒng)一寫在一個(gè)js里,到處引用。