微信小程序面試題
1. 小程序有幾個(gè)文件?
WXML:微信自己定義的一套組件
WXSS : 用于描述 WXML 的組件樣式
js : 邏輯處理
json : 小程序頁面配置
2.小程序怎么跟隨事件傳值
在 頁面標(biāo)簽上通過 綁定 dataset-key = value , 然后綁定點(diǎn)擊通過e.currentTarget.dataset.key 來獲取標(biāo)簽上綁定的值。
<button bindtap="get" data-name="測試"> 拿到傳值</button>
get(e){
console.log(e.currentTarget.dataset.name)
},
3. 小程序WXSS與css的區(qū)別
WXSS
wxss 背景圖片只能引入外鏈,不能使用本地圖片
小程序樣式使用 @import 引入 外聯(lián)樣式文件,地址為相對(duì)路徑。
尺寸單位為 rpx , rpx 是響應(yīng)式像素,可以根據(jù)屏幕寬度進(jìn)行自適應(yīng)。
4. 小程序的雙向綁定和Vue哪里不一樣。
小程序 直接使用this.data.key = value 是 不能更新到視圖當(dāng)中的。
必須使用 this.setData({ key :value }) 來更新值。
5. 小程序的生命周期函數(shù)
onLoad : 頁面加載時(shí)觸發(fā)。一個(gè)頁面只會(huì)調(diào)用一次,可以在 onLoad的參數(shù)中獲取打開當(dāng)前頁面路徑中的參數(shù)
onShow : 頁面顯示 / 切入前臺(tái)時(shí)觸發(fā)調(diào)用。
onReady : 頁面初次渲染完成時(shí)觸發(fā),一個(gè)頁面只會(huì)調(diào)用一次。
onHide : 頁面隱藏 / 切入后臺(tái)時(shí)觸發(fā),如 navigateTo 或底部 tab切換到其他頁面,小程序切入后臺(tái)等
onUnload : 頁面卸載時(shí)觸發(fā)。如 redirectTo或 navigateBack 到其他頁面時(shí).
6. 小程序怎么實(shí)現(xiàn)下拉刷新
兩種方案方案 一 :通過在 App.json 中, 將 "enablePullDownRefresh": true, 開啟全局下拉刷新。或者通過在 組件 .json , 將 "enablePullDownRefresh": true, 單組件下拉刷新。方案二:scroll-view :使用該滾動(dòng)組件 自定義刷新,通過 bindscrolltoupper 屬性, 當(dāng)滾動(dòng)到頂部/左邊,會(huì)觸發(fā) scrolltoupper事件,所以我們可以利用這個(gè)屬性,來實(shí)現(xiàn)下拉刷新功能。
7. bindtap和 catchtap區(qū)別
相同點(diǎn): 都是點(diǎn)擊事件
不同點(diǎn): bindtap 不會(huì)阻止冒泡, catchtap 可以阻止冒泡。
8. 小程序有哪些傳遞數(shù)據(jù)的方法
1. 使用全局變量在 app.js 中的 this.globalData = { } 中放入要存儲(chǔ)的數(shù)據(jù)。在 組件.js 中, 頭部 引入 const app = getApp(); 獲取到全局變量直接使用 app.globalData.key 來進(jìn)行賦值和獲取值。2. 使用 路由wx.navigateTo 和 wx.redirectTo 時(shí),可以通過在 url 后 拼接 + 變量, 然后在 目標(biāo)頁面 通過在 onLoad 周期中,通過參數(shù)來獲取傳遞過來的值。3. 使用本地緩存
9. 簡述下wx.navigateTo(),wx.redirectTo(),wx.switchTab(),wx.navigateBack(),wx.reLaunch()區(qū)別
wx.navigateTo() : 保留當(dāng)前頁面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁面。但是不能跳到 tabbar 頁面
wx.redirectTo() : 關(guān)閉當(dāng)前頁面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁面。但是不允許跳轉(zhuǎn)到 tabbar 頁面
wx.switchTab() : 跳轉(zhuǎn)到 TabBar 頁面,并關(guān)閉其他所有非 tabBar 頁面
wx.navigateBack() : 關(guān)閉當(dāng)前頁面,返回上一頁面或多級(jí)頁面。可通過 getCurrentPages() 獲取當(dāng)前的頁面棧,決定需要返回幾層
wx.reLaunch() : 關(guān)閉所有頁面,打開到應(yīng)用的某個(gè)頁面。
10. 小程序wx:if和 hidden的區(qū)別
wx:if : 有更高的切換消耗。
hidden : 有更高的初始渲染消耗。
使用頻繁切換使用 hidden, 運(yùn)行時(shí)條件變化使用 wx: if
11.app.json全局配置文件描述
pages : 用于存放當(dāng)前小程序的所有頁面路徑
window : 小程序所有頁面的頂部背景顏色,文字顏色配置。
tabBar : 小程序底部的 Tab ,最多5個(gè),最少2個(gè)。
12. 如何封裝小程序請求
封裝 wx.request 請求傳遞需要的參數(shù)( url , data , method , success 成功回調(diào) , fail 失敗回調(diào) ) , 封裝常用方法 POST , GET , DELETE , PUT .... 最后導(dǎo)出這些方法
然后新建一個(gè) api.js 文件,導(dǎo)入封裝好的方法,然后調(diào)取相應(yīng)的方法,傳遞數(shù)據(jù)。
wx.request 封裝
var app = getApp(); //獲取小程序全局唯一app實(shí)例
var host = '******************'; //接口地址
//POST請求
function post(url, data, success,fail) {
request(url, postData, "POST", doSuccess, doFail);
}
//GET請求
function get(url, data, success, fail) {
request(url, postData, "GET", doSuccess, doFail);
}
function request(url, data, method, success, fail) {
wx.showLoading({
title: "正在加載中...",
})
wx.request({
url: host + url, //請求地址
method: method, //請求方法
header: { //請求頭
"Content-Type": "application/json;charset=UTF-8"
},
data: data, //請求參數(shù)
dataType: 'json', //返回?cái)?shù)據(jù)格式
responseType: 'text', //響應(yīng)的數(shù)據(jù)類型
success: function(res) {
wx.hideLoading();
//成功執(zhí)行方法,參數(shù)值為res.data,直接將返回的數(shù)據(jù)傳入
success(res.data);
},
fail: function() {
//失敗執(zhí)行方法
fail();
},
})
}
module.exports = {
postRequest: post,
getRequest: get,
}
組件使用 封裝好的請求
var http = require('../../utils/request.js'); //相對(duì)路徑
var params = {//請求參數(shù)
id:this.data.userId
}
http.postRequest("user/delUser", params, function(res) {
console.log("修改成功!");
}, function(res) {
console.log("修改失敗!!!")
})
13. 小程序運(yùn)行機(jī)制
熱啟動(dòng) :假如用戶已經(jīng)打開了某個(gè)小程序,在一定時(shí)間內(nèi)再次打開小程序的話,這個(gè)時(shí)候我們就不再需要重新啟動(dòng)了,這需要把我們的后臺(tái)打開的小程序切換到前臺(tái)來使用。
冷啟動(dòng):用戶首次打開小程序或被微信主動(dòng)銷毀再次打開的情況,此時(shí)小程序需要重新加載啟動(dòng)。
14. 小程序什么時(shí)候會(huì)主動(dòng)銷毀?
小程序在進(jìn)入后臺(tái)之后,客戶端會(huì)幫我們在一定時(shí)間內(nèi)維持我們的一個(gè)狀態(tài),超過五分鐘后,會(huì)被微信主動(dòng)銷毀.
官方也沒有明確說明 什么時(shí)候銷毀, 在不同機(jī)型表現(xiàn)也不一樣,
2019年開發(fā)時(shí):時(shí)間官方文檔沒有說明,但是經(jīng)過詢問一般指5分鐘內(nèi)
2020年開發(fā)時(shí):時(shí)間官方文檔沒有說明,實(shí)測Android/ target=_blank class=infotextkey>安卓沒有固定時(shí)間,內(nèi)存足夠情況下,有時(shí)候一天了還在,有時(shí)候幾分鐘就沒了。
15. 微信授權(quán)流程
轉(zhuǎn)自:
https://my.oschina.net/u/4974233/blog/4939738






