微信小程序面試題

1. 小程序有幾個(gè)文件?

WXML: 微信自己定義的一套組件 WXSS : 用于描述 WXML 的組件樣式 js : 邏輯處理 json : 小程序頁(yè)面配置

2.小程序怎么跟隨事件傳值

在 頁(yè)面標(biāo)簽上通過(guò) 綁定 dataset-key = value , 然后綁定點(diǎn)擊通過(guò)e.currentTarget.dataset.key 來(lái)獲取標(biāo)簽上綁定的值。

<button bindtap="get"  data-name="測(cè)試"> 拿到傳值</button>

get(e){
    console.log(e.currentTarget.dataset.name)
  },

3. 小程序 WXSSCSS 的區(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 }) 來(lái)更新值。

5. 小程序的生命周期函數(shù)

onLoad : 頁(yè)面加載時(shí)觸發(fā)。一個(gè)頁(yè)面只會(huì)調(diào)用一次,可以在 onLoad的參數(shù)中獲取打開(kāi)當(dāng)前頁(yè)面路徑中的參數(shù) onShow : 頁(yè)面顯示 / 切入前臺(tái)時(shí)觸發(fā)調(diào)用。 onReady : 頁(yè)面初次渲染完成時(shí)觸發(fā),一個(gè)頁(yè)面只會(huì)調(diào)用一次。 onHide : 頁(yè)面隱藏 / 切入后臺(tái)時(shí)觸發(fā),如 navigateTo 或底部tab切換到其他頁(yè)面,小程序切入后臺(tái)等 onUnload : 頁(yè)面卸載時(shí)觸發(fā)。如 redirectTonavigateBack 到其他頁(yè)面時(shí).

6. 小程序怎么實(shí)現(xiàn)下拉刷新

兩種方案

方案 一 :

通過(guò)在 app.json 中, 將 "enablePullDownRefresh": true, 開(kāi)啟全局下拉刷新。 或者通過(guò)在 組件 .json , 將 "enablePullDownRefresh": true, 單組件下拉刷新。

方案二:

scroll-view : 使用該滾動(dòng)組件 自定義刷新,通過(guò) bindscrolltoupper 屬性, 當(dāng)滾動(dòng)到頂部/左邊,會(huì)觸發(fā) scrolltoupper事件,所以我們可以利用這個(gè)屬性,來(lái)實(shí)現(xiàn)下拉刷新功能。

7. bindtapcatchtap 區(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 來(lái)進(jìn)行賦值和獲取值。

\2. 使用 路由

wx.navigateTowx.redirectTo 時(shí),可以通過(guò)在 url 后 拼接 + 變量, 然后在 目標(biāo)頁(yè)面 通過(guò)在 onLoad 周期中,通過(guò)參數(shù)來(lái)獲取傳遞過(guò)來(lái)的值。

\3. 使用本地緩存

9. 簡(jiǎn)述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch() 區(qū)別

wx.navigateTo() : 保留當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面。但是不能跳到 tabbar 頁(yè)面 wx.redirectTo() : 關(guān)閉當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面。但是不允許跳轉(zhuǎn)到 tabbar 頁(yè)面 wx.switchTab() : 跳轉(zhuǎn)到 TabBar 頁(yè)面,并關(guān)閉其他所有非 tabBar 頁(yè)面 wx.navigateBack() : 關(guān)閉當(dāng)前頁(yè)面,返回上一頁(yè)面或多級(jí)頁(yè)面。可通過(guò)getCurrentPages() 獲取當(dāng)前的頁(yè)面棧,決定需要返回幾層 wx.reLaunch() : 關(guān)閉所有頁(yè)面,打開(kāi)到應(yīng)用的某個(gè)頁(yè)面。

10. 小程序 wx:ifhidden 的區(qū)別

wx:if : 有更高的切換消耗。 hidden : 有更高的初始渲染消耗。

使用

頻繁切換使用 hidden, 運(yùn)行時(shí)條件變化使用wx: if

11. app.json 全局配置文件描述

pages : 用于存放當(dāng)前小程序的所有頁(yè)面路徑 window : 小程序所有頁(yè)面的頂部背景顏色,文字顏色配置。 tabBar : 小程序底部的Tab ,最多5個(gè),最少2個(gè)。

12. 如何封裝小程序請(qǐng)求

封裝 wx.request 請(qǐng)求傳遞需要的參數(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請(qǐng)求
function post(url, data, success,fail) {
  request(url, postData, "POST", doSuccess, doFail);
}
 
//GET請(qǐng)求
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, //請(qǐng)求地址
    method: method, //請(qǐng)求方法
    header: { //請(qǐng)求頭
      "Content-Type": "application/json;charset=UTF-8"
    },
    data: data, //請(qǐng)求參數(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,
}

組件使用 封裝好的請(qǐng)求

var http = require('../../utils/request.js'); //相對(duì)路徑


var params = {//請(qǐng)求參數(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)打開(kāi)了某個(gè)小程序,在一定時(shí)間內(nèi)再次打開(kāi)小程序的話,這個(gè)時(shí)候我們就不再需要重新啟動(dòng)了,這需要把我們的后臺(tái)打開(kāi)的小程序切換到前臺(tái)來(lái)使用。 冷啟動(dòng):用戶首次打開(kāi)小程序或被微信主動(dòng)銷毀再次打開(kāi)的情況,此時(shí)小程序需要重新加載啟動(dòng)。

14. 小程序什么時(shí)候會(huì)主動(dòng)銷毀?

小程序在進(jìn)入后臺(tái)之后,客戶端會(huì)幫我們?cè)谝欢〞r(shí)間內(nèi)維持我們的一個(gè)狀態(tài),超過(guò)五分鐘后,會(huì)被微信主動(dòng)銷毀.

官方也沒(méi)有明確說(shuō)明 什么時(shí)候銷毀, 在不同機(jī)型表現(xiàn)也不一樣,

2019年開(kāi)發(fā)時(shí):時(shí)間官方文檔沒(méi)有說(shuō)明,但是經(jīng)過(guò)詢問(wèn)一般指5分鐘內(nèi)

2020年開(kāi)發(fā)時(shí):時(shí)間官方文檔沒(méi)有說(shuō)明,實(shí)測(cè)安卓沒(méi)有固定時(shí)間,內(nèi)存足夠情況下,有時(shí)候一天了還在,有時(shí)候幾分鐘就沒(méi)了。

15. 微信授權(quán)流程

sr290vr0dw.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容