1、簡(jiǎn)單描述下微信小程序的相關(guān)文件類(lèi)型?
?? 微信小程序項(xiàng)目結(jié)構(gòu)主要有四個(gè)文件類(lèi)型:
????wxml 模板文件袒炉,是框架設(shè)計(jì)的一套標(biāo)簽語(yǔ)言,結(jié)合基礎(chǔ)組件樊零、事件系統(tǒng)我磁、可以構(gòu)建出 頁(yè)面的結(jié)構(gòu)孽文;
????wxss 樣式文件,是一套樣式語(yǔ)言夺艰,用于描述 WXML 的組件樣式芋哭;
????js 腳本邏輯文件,邏輯處理網(wǎng)絡(luò)請(qǐng)求郁副;
????json 配置文件减牺,小程序設(shè)置,如頁(yè)面注冊(cè)霞势,頁(yè)面標(biāo)題及 tabBar烹植;
??app.json 整個(gè)小程序的全局配置,包括:
????pages: [所有頁(yè)面路徑]
????網(wǎng)絡(luò)設(shè)置(網(wǎng)絡(luò)超時(shí)時(shí)間)
????界面表現(xiàn)(頁(yè)面注冊(cè))
????window: {背景色愕贡、導(dǎo)航樣式、默認(rèn)標(biāo)題}
????底部 tab 等
??app.js 監(jiān)聽(tīng)并處理小程序的生命周期函數(shù)巷屿、聲明全局變量固以;
??app.wxss 全局配置的樣式文件。
2嘱巾、請(qǐng)談?wù)?wxml 與標(biāo)準(zhǔn)的 html 的異同憨琳?
??都是用來(lái)描述頁(yè)面的結(jié)構(gòu);
??都由標(biāo)簽旬昭、屬性等構(gòu)成篙螟;
??標(biāo)簽名字不一樣,且小程序標(biāo)簽更少问拘,單一標(biāo)簽更多遍略;
??多了一些 wx:if 這樣的屬性以及 {{ }} 這樣的表達(dá)式;
??WXML 僅能在微信小程序開(kāi)發(fā)者工具中預(yù)覽骤坐,而 HTML 可以在瀏覽器內(nèi)預(yù)覽绪杏;
??組件封裝不同, WXML 對(duì)組件進(jìn)行了重新封裝纽绍;
??小程序運(yùn)行在 JS Core 內(nèi)蕾久,沒(méi)有 DOM 樹(shù)和 window 對(duì)象,小程序中無(wú)法使用 window 對(duì)象和 document 對(duì)象拌夏。
3僧著、請(qǐng)談?wù)?WXSS 和 CSS 的異同?
??都是用來(lái)描述頁(yè)面的樣式障簿;
??WXSS 具有 CSS 大部分的特性盹愚,但是也做了一些擴(kuò)充和修改;
??WXSS 新增了尺寸單位卷谈,WXSS 在底層支持新的尺寸單位 rpx杯拐;
??WXSS 僅支持部分 CSS 選擇器;
??WXSS 提供全局樣式與局部樣式;
??WXSS 不支持 window 和 dom 文檔流端逼。
4朗兵、怎么封裝微信小程序的數(shù)據(jù)請(qǐng)求?
5顶滩、小程序頁(yè)面間有哪些傳遞數(shù)據(jù)的方法余掖?
??在 app.js 中使用全局變量實(shí)現(xiàn)數(shù)據(jù)傳遞;
??給元素添加 data-*屬性來(lái)傳遞值礁鲁,然后通過(guò) e.currentTarget.dataset 或 onload 的 param 參數(shù)獲取盐欺。 注:data-名稱(chēng)不能有大寫(xiě)字母、不可以存放對(duì)象仅醇;
??通過(guò)設(shè)置 id 的方法標(biāo)識(shí)來(lái)傳值冗美,通過(guò) e.currentTarget.id 獲取設(shè)置的 id 的值,然后通過(guò)設(shè)置全局對(duì)象的方式來(lái)傳遞數(shù)值析二;
??頁(yè)面跳轉(zhuǎn)或重定向時(shí)粉洼,在 navigator 中使用 url 帶參數(shù)傳遞數(shù)據(jù);
??使用組件模板 template 傳遞參數(shù)叶摄;
??使用緩存?zhèn)鬟f參數(shù)属韧;
??使用數(shù)據(jù)庫(kù)傳遞參數(shù)。
6蛤吓、請(qǐng)談?wù)勑〕绦虻碾p向綁定和 vue 的異同宵喂?
??兩者大體相同,但小程序直接使用 this.data 屬性是不可以同步到視圖的会傲,必須調(diào)用 this.setData()方法锅棕。
??雙向綁定
:
????vue 默認(rèn)支持雙向綁定;
????微信小程序需要借助 data 來(lái)實(shí)現(xiàn)唆铐。
??取值:
????vue 中哲戚,通過(guò) this.xxx 取值;
????小程序中艾岂,通過(guò) this.data.xxx 取值顺少。
??定義方法:
????小程序定義方法在 page.js 中直接定義即可;
????vue 的方法通過(guò)寫(xiě)在 method 中進(jìn)行定義王浴。
??取變量:小程序通過(guò) wx:for = "{{ lists }}"脆炎;Vue 是 v-for = "item in lists";
??調(diào)用 data 模型(賦值):
????小程序:this.data.item 需要調(diào)用 this.setData({item:1}) 進(jìn)行賦值
????vue: this.item 調(diào)用 this.item = 1 賦值
??小程序的雙向綁定原則上來(lái)說(shuō)并不是真正的雙向綁定氓辣。如果在小程序 .js 文件中改變了某個(gè)變量的值秒裕,那么頁(yè)面上的值并不會(huì)跟著改變;如果想要頁(yè)面上的值也跟著改變的話钞啸,需要通過(guò) this.setData 來(lái)操作几蜻。而 Vue 默認(rèn)就是雙向綁定喇潘,只改變了某個(gè)變量的值, 頁(yè)面上也會(huì)跟著改變梭稚。
7颖低、請(qǐng)談?wù)勑〕绦虻纳芷诤瘮?shù)?
??全局生命周期 app.js:
????onLaunch() 小程序初始化弧烤,只會(huì)調(diào)用一次忱屑,可獲取當(dāng)前頁(yè)面路徑中的參數(shù);
????onShow() 頁(yè)面顯示或切入前臺(tái)時(shí)觸發(fā)暇昂,一般用來(lái)發(fā)送數(shù)據(jù)請(qǐng)求莺戒;
????onHide() 頁(yè)面隱藏或切入后臺(tái)時(shí)觸發(fā);
????onError() 頁(yè)面發(fā)生錯(cuò)誤時(shí)觸發(fā)急波;
????onPageNotFound() 小程序要打開(kāi)的頁(yè)面不存在時(shí)觸發(fā)从铲,可以在此函數(shù)進(jìn)行重定向操作。
??小程序頁(yè)面的生命周期:
????onLoad() 頁(yè)面加載時(shí)觸發(fā)澄暮,只會(huì)調(diào)用一次食店,可獲取當(dāng)前頁(yè)面路徑中的參數(shù);
????onShow() 頁(yè)面顯示或切入前臺(tái)時(shí)觸發(fā)赏寇,一般用來(lái)發(fā)送數(shù)據(jù)請(qǐng)求;
????onReady() 頁(yè)面初次渲染完成時(shí)觸發(fā), 只會(huì)調(diào)用一次价认,代表頁(yè)面已可和視圖層進(jìn)行交互嗅定;
????onHide() 頁(yè)面隱藏或切入后臺(tái)時(shí)觸發(fā), 如底部 tab 切換到其他頁(yè)面或小程序切入后臺(tái)等;
????onUnload() 頁(yè)面卸載時(shí)觸發(fā)用踩,如 redirectTo 或 navigateBack 到其他頁(yè)面時(shí)渠退;
????onPullDownRefresh() 下拉刷新的鉤子函數(shù),用戶下拉刷新時(shí)會(huì)自動(dòng)走到這個(gè)函數(shù)中脐彩;
????onReachBottom() 上拉觸底的鉤子函數(shù)碎乃;
????onShareAppMessage() 用戶點(diǎn)擊右上角分享。
??小程序組件中的生命周期:
????lifetimes:組件生命周期
??????created() 在組件實(shí)例剛剛被創(chuàng)建時(shí)執(zhí)行惠奸;
??????attached() 在組件實(shí)例進(jìn)入頁(yè)面節(jié)點(diǎn)樹(shù)時(shí)執(zhí)行梅誓;
??????ready() 在組件在視圖層布局完成后執(zhí)行;
??????moved() 在組件實(shí)例被移動(dòng)到節(jié)點(diǎn)樹(shù)另一個(gè)位置時(shí)執(zhí)行佛南;
??????detached() 在組件實(shí)例被從頁(yè)面節(jié)點(diǎn)樹(shù)移除時(shí)執(zhí)行梗掰;
??????error() 每當(dāng)組件方法拋出錯(cuò)誤時(shí)執(zhí)行。
????pageLifetimes:組件所在頁(yè)面的生命周期
??????show() 頁(yè)面被展示時(shí)執(zhí)行嗅回;
??????hide() 頁(yè)面被隱藏時(shí)執(zhí)行及穗;
??????resize() 頁(yè)面尺寸變化時(shí)執(zhí)行。
8绵载、簡(jiǎn)述微信小程序原理埂陆?
??小程序本質(zhì)就是一個(gè)單頁(yè)面應(yīng)用苛白,所有的頁(yè)面渲染和事件處理,都在一個(gè)頁(yè)面內(nèi)進(jìn)行焚虱,但又可以通過(guò)微信客戶端調(diào)用原生的各種接口购裙;
??它的架構(gòu),是數(shù)據(jù)驅(qū)動(dòng)的架構(gòu)模式著摔,它的 UI 和數(shù)據(jù)是分離的缓窜,所有的頁(yè)面更新,都需要通過(guò)對(duì)數(shù)據(jù)的更改來(lái)實(shí)現(xiàn)谍咆;
??它從技術(shù)上講和現(xiàn)有的前端開(kāi)發(fā)差不多禾锤,采用 JavaScript、WXML摹察、WXSS 三種技術(shù)進(jìn)行開(kāi)發(fā)恩掷;
??功能可分為 webview 和 appService 兩個(gè)部分:webview 用來(lái)展現(xiàn) UI,appService 用來(lái)處理業(yè)務(wù)邏輯供嚎、數(shù)據(jù)及接口調(diào)用黄娘,兩個(gè)部分在兩個(gè)進(jìn)程中運(yùn)行,通過(guò)系統(tǒng)層 JSBridge 實(shí)現(xiàn)通信克滴,實(shí)現(xiàn) UI 的渲染逼争、事件的處理等。
9劝赔、請(qǐng)談?wù)勗_(kāi)發(fā)小程序誓焦、wepy、mpvue着帽、taro 的對(duì)比杂伟?
小程序原生和wepy、mpvue仍翰、uni-app赫粥、taro等主流開(kāi)發(fā)框架,哪個(gè)好予借?這里是深度橫評(píng)對(duì)比
小程序第三方框架對(duì)比 ( wepy / mpvue / taro )
10越平、哪些方法來(lái)提高微信小程序的應(yīng)用速度?
??提高頁(yè)面的加載速度
??用戶行為預(yù)測(cè) # 什么叫行為預(yù)測(cè)
??減少默認(rèn) data 的大小
??組件化方案 # 使用
11蕾羊、怎么解決微信小程序的異步請(qǐng)求問(wèn)題喧笔?
??小程序支持 ES6 語(yǔ)法,使用 Promise 來(lái)解決異步請(qǐng)求
function asyncFn1() {
return new Promise((resolve, reject) => {
// .........
});
}
// 調(diào)用
asyncFn1()
.then(asyncFn2)
.then(asyncFn3);
12龟再、小程序關(guān)聯(lián)微信公眾號(hào)如何確定用戶的唯一性书闸?
??使用 wx.getUserProfile,可獲取 encryptedData利凑,里面有 union_id浆劲,后端需要進(jìn)行對(duì)稱(chēng)解密嫌术。 ( 無(wú)法通過(guò)wx.getUserInfo與<button open-type="getUserInfo"/>獲取用戶個(gè)人信息(頭像、昵稱(chēng)牌借、性別與地區(qū))度气,將直接獲取匿名數(shù)據(jù)(包括userInfo與encryptedData中的用戶個(gè)人信息),獲取加密后的openID與unionID數(shù)據(jù)的能力不做調(diào)整膨报。)
13磷籍、微信小程序如何實(shí)現(xiàn)下拉刷新?
??在 json 配置中開(kāi)啟 enablePullDownRefresh 下拉刷新的動(dòng)作现柠,在 .js 文件中通過(guò) onPullDownRefresh 函數(shù)來(lái)實(shí)現(xiàn)相關(guān)的操作院领。
14. 微信小程序使用 webview 直接加載要注意哪些事項(xiàng)?
??必須要在小程序后臺(tái)使用管理員添加業(yè)務(wù)域名
够吩;
??h5 頁(yè)面跳轉(zhuǎn)至小程序的版本必須是 1.3.1 以上比然;
??微信分享只可以是小程序的主名稱(chēng),如要自定義分享內(nèi)容周循,需小程序版本在 1.7.1 以上;
??h5 的支付不可以是微信公眾號(hào)的 appid强法,必須是小程序的 appid,而且用戶的 openid 也必須是用戶小程序的湾笛。
15饮怯、webview 中的頁(yè)面怎么跳轉(zhuǎn)回小程序?
wx.miniProgram.navigateTo 保留當(dāng)前頁(yè)面嚎研,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面
wx.miniProgram.redirectTo 關(guān)閉當(dāng)前頁(yè)面硕淑,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面
wx.miniProgram.navigateBack 關(guān)閉當(dāng)前頁(yè)面,返回上一頁(yè)面或多級(jí)頁(yè)面
wx.miniProgram.reLaunch 關(guān)閉所有頁(yè)面嘉赎,打開(kāi)到應(yīng)用內(nèi)的某個(gè)頁(yè)面
wx.miniProgram.switchTab 跳轉(zhuǎn)到 tabBar 頁(yè)面,并關(guān)閉其他所有非 tabBar 頁(yè)面
16于樟、簡(jiǎn)述五個(gè)路由的區(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)用內(nèi)的某個(gè)頁(yè)面零渐。
??可以按照在 wxml窒舟、js 和跳轉(zhuǎn)失敗進(jìn)行區(qū)分:
????在 wxml 頁(yè)面中:可分為 “跳轉(zhuǎn)新頁(yè)面”、“在當(dāng)前頁(yè)打開(kāi)”诵盼、“切換到首頁(yè) Tab”惠豺;
????在 js 頁(yè)面中:分為 “應(yīng)用內(nèi)的頁(yè)面” 和 “tabBar 頁(yè)面” ;
????如果上述跳轉(zhuǎn)遇到跳轉(zhuǎn)失敗或者無(wú)效的問(wèn)題风宁,請(qǐng)?jiān)L問(wèn):wx.navigateTo / wx.redirectTo 無(wú)效
17洁墙、bindtap 和 catchtap 的區(qū)別?
??相同點(diǎn):首先他們都是作為點(diǎn)擊事件函數(shù)杀糯,就是點(diǎn)擊時(shí)觸發(fā)扫俺。在這個(gè)作用上他們是一樣的, 可以不做區(qū)分固翰。
??不同點(diǎn):他們的不同點(diǎn)主要是 bindtap 是不會(huì)阻止冒泡事件的狼纬,catchtap 是阻止事件冒泡 的。
18骂际、微信小程序與 H5 的區(qū)別疗琉?
??運(yùn)行環(huán)境不同:小程序在微信運(yùn)行,h5 在瀏覽器運(yùn)行歉铝;
??開(kāi)發(fā)成本不同:h5 需要兼容不同的瀏覽器盈简;
??獲取系統(tǒng)權(quán)限不同:系統(tǒng)級(jí)權(quán)限可以和小程序無(wú)縫銜接;
??應(yīng)用在生產(chǎn)環(huán)境的運(yùn)行流暢度:h5 需不斷對(duì)項(xiàng)目?jī)?yōu)化來(lái)提高用戶體驗(yàn)太示;
19柠贤、小程序如何更新頁(yè)面中的值?
??可以通過(guò) this.setData 來(lái)進(jìn)行改變类缤。
20臼勉、如何實(shí)現(xiàn)登錄數(shù)據(jù)的持久化?
??可以通過(guò) wx.setStorageSync('鍵名', 對(duì)應(yīng)的值) 來(lái)進(jìn)行數(shù)據(jù)持久化存儲(chǔ)餐弱。
21宴霸、微信小程序和 app 有什么不同之處?
??微信小程序?qū)儆谳p量級(jí)的 app 但是限制在微信中膏蚓,開(kāi)發(fā)周期短瓢谢,功能較少,占用空間少驮瞧;
??app 就相反 需要占用額外內(nèi)存 開(kāi)發(fā)周期長(zhǎng)
22氓扛、微信小程序如何進(jìn)行雙向綁定?
??通過(guò) bind-tap 點(diǎn)擊事件 向 app.js 定義的方法中獲取回執(zhí)论笔;
??設(shè)置 data 的值 實(shí)現(xiàn)雙向綁定幢尚。
23破停、如何自定義 tabbar?
自定義 tabBar
??a. 配置信息
????在 app.json 中的 tabBar 項(xiàng)指定 custom 字段尉剩,同時(shí)其余 tabBar 相關(guān)配置也補(bǔ)充完整真慢。
????所有 tab 頁(yè)的 json 里需聲明 usingComponents 項(xiàng),也可以在 app.json 全局開(kāi)啟理茎。
??b. 添加 tabBar 代碼文件
????在代碼根目錄下添加入口文件
??c. 編寫(xiě) tabBar 代碼
????用自定義組件的方式編寫(xiě)即可黑界,該自定義組件完全接管 tabBar 的渲染。另外皂林,自定義組件新增 getTabBar
接口朗鸠,可獲取當(dāng)前頁(yè)面下的自定義 tabBar 組件實(shí)例。
24础倍、小程序怎樣使用自定義組件烛占?
??a. 新建自定義組件目錄,生成目錄結(jié)構(gòu)沟启;
??b. 寫(xiě)好組件內(nèi)容忆家;
??c. 在要使用的目標(biāo)頁(yè)面的 json 文件中配置下 usingComponents,引入組件德迹;
??d. 以標(biāo)簽的形式在頁(yè)面中使用該組件即可芽卿;
??e. 傳遞數(shù)據(jù)和 vue 一樣,通過(guò)自定義屬性胳搞,然后在組件里通過(guò) properties 接收就可以使用了卸例。
25、小程序本地存儲(chǔ)(數(shù)據(jù)緩存)有哪些常用 api肌毅?
??a. 數(shù)據(jù)的存儲(chǔ)筷转,將數(shù)據(jù)存儲(chǔ)在本地緩存中指定的 key 中
????wx.setStorage(Object object) 異步
????wx.setStorageSync(string key, any data) 同步
??b. 數(shù)據(jù)的獲取,從本地緩存中獲取指定 key 的內(nèi)容
????wx.getStorage(Object object) 異步
????wx.getStorageSync(string key) 同步
??c. 存儲(chǔ)信息的獲取悬而,異步獲取當(dāng)前 storage 的相關(guān)信息
????wx.getStorageInfo(Object object) 異步
????wx.getStorageInfoSync() 同步
??d. 數(shù)據(jù)的刪除旦装,從本地緩存中移除指定 key
????wx.removeStorage(Object object) 異步
????wx.removeStorageSync(string key) 同步
??e. 數(shù)據(jù)的清空,清理本地?cái)?shù)據(jù)緩存
????wx.clearStorage(Object object) 異步
????wx.clearStorageSync() 同步
26摊滔、說(shuō)一下小程序頁(yè)面之間的傳值?
??URL 傳值
????這種方式最常用店乐,比如通過(guò) wx.navigateTo({}) 直接通過(guò)跳轉(zhuǎn)頁(yè)面的 URL 進(jìn)行傳值:
wx.navigateTo({
url: `../detail/detail?cid=${cid}&access_token=${access_token}`
});
????然后在另一個(gè)頁(yè)面通過(guò) options 進(jìn)行接收:
onLoad: function (options) {
console.log('cid =' + options.cid);
console.log('access_token =' + options.access_token);
}
????這種傳值方式只適合值比較少的時(shí)候使用艰躺。
??本地緩存
????傳值比較多的時(shí)候,建議寫(xiě)本地緩存進(jìn)行傳值眨八。
????小程序 API 提供了本地緩存數(shù)據(jù)的 API腺兴,默認(rèn)可以緩存 10M 的數(shù)據(jù): wx.setStorageSync('checkin', checkin);
????在需要的頁(yè)面直接調(diào)用 wx.getStorageSync 即可獲取到存儲(chǔ)的本地緩存數(shù)據(jù)。
??全局 app
????我們可以利用 app.js 和 app.wxss 中的代碼都是全局生效的這一特性廉侧,在不同頁(yè)面之間進(jìn)行傳值页响。
App({
// 全局變量
globalData: {
host: 'https://xxx/xcx',
version: 2,
versionFeature: '更新說(shuō)明'
}
})
????在使用的頁(yè)面中通過(guò)引入 app.js 來(lái)使用定義的全局變量篓足。
const app = getApp();
let app_host = app.globalData.host;
27、本地圖片資源無(wú)法通過(guò) wxss 獲热虿稀栈拖?
??本地資源圖片無(wú)法通過(guò) WXSS 獲取,可以使用網(wǎng)絡(luò)圖片没陡,或者 base64涩哟,或者使用標(biāo)簽來(lái)解決。
28盼玄、wx.navigateTo 無(wú)法打開(kāi)頁(yè)面是為什么贴彼?如何解決?
??一個(gè)應(yīng)用同時(shí)只能打開(kāi) 10 個(gè)頁(yè)面埃儿,當(dāng)已經(jīng)打開(kāi)了 10 個(gè)頁(yè)面之后器仗,wx.navigateTo 不能正常打開(kāi)新頁(yè)面。請(qǐng)避免多層級(jí)的交互方式童番,或者使用 wx.redirectTo精钮。
??建議封裝跳轉(zhuǎn)方法, 在方法里面做個(gè)判斷, 小于 10 層使用 navigateTo, 否則使用 redirectTo
29、tabBar 設(shè)置不顯示妓盲?
??tabBar 設(shè)置不顯示有如下幾個(gè)原因:
????tabBar 的數(shù)量少于 2 項(xiàng)或超過(guò) 5 項(xiàng)都不會(huì)顯示杂拨;
????tabBar 寫(xiě)法錯(cuò)誤導(dǎo)致不顯示;
????tabBar 沒(méi)有寫(xiě) pagePath 字段(程序啟動(dòng)后顯示的第一個(gè)頁(yè)面)
30悯衬、小程序調(diào)用后臺(tái)接口遇到哪些問(wèn)題弹沽?
??數(shù)據(jù)的大小有限制,超過(guò)范圍會(huì)直接導(dǎo)致整個(gè)小程序崩潰筋粗,除非重啟小程序策橘;
??小程序不可以直接渲染文章內(nèi)容頁(yè)這類(lèi)型的 html 文本內(nèi)容,若需顯示要借助插件娜亿,但插件渲染會(huì)導(dǎo)致頁(yè)面加載變慢丽已,所以最好在后臺(tái)對(duì)文章內(nèi)容的 html 進(jìn)行過(guò)濾,后臺(tái)直接批量替換 p 標(biāo)簽 div 標(biāo)簽為 view 標(biāo)簽买决,然后其它的標(biāo)簽讓插件來(lái)做沛婴,減輕前端處理的時(shí)間。
31督赤、小程序的登錄流程嘁灯?
小程序登錄
調(diào)用 wx.login() 獲取 code
調(diào)用 wx.request() 發(fā)送 code 到我們自己的服務(wù)器(我們自己的服務(wù)器會(huì)返回一個(gè)登錄狀態(tài)的標(biāo)識(shí),比如 token)
將登錄狀態(tài)的標(biāo)識(shí) token 進(jìn)行存儲(chǔ)躲舌,以便下次使用
請(qǐng)求需要登錄狀態(tài)的接口時(shí)丑婿,帶上這個(gè) token。
32、請(qǐng)談?wù)勎⑿判〕绦蜃饔茫?/h5>
??小程序是一種不需要下載安裝即可使用的應(yīng)用羹奉,它實(shí)現(xiàn)了應(yīng)用“觸手可及”的夢(mèng)想秒旋,用戶 掃一掃 或者 搜一下 即可打開(kāi)應(yīng)用。也體現(xiàn)了“用完即走”的理念诀拭,用戶不用關(guān)心是否安裝太多應(yīng)用的問(wèn)題迁筛。應(yīng)用將無(wú)處不在晾捏,隨時(shí)可用摄乒,但又無(wú)需安裝卸載。
??對(duì)于開(kāi)發(fā)者而言技肩,小程序開(kāi)發(fā)門(mén)檻相對(duì)較低俗孝,難度不及 APP酒甸,能夠滿足簡(jiǎn)單的基礎(chǔ)應(yīng)用,適合生活服務(wù)類(lèi)線下商鋪以及非剛需低頻應(yīng)用的轉(zhuǎn)換赋铝。
33插勤、分析微信小程序的優(yōu)劣勢(shì)?
??優(yōu)點(diǎn):
????可進(jìn)行各種功能開(kāi)發(fā)革骨,比傳統(tǒng)網(wǎng)頁(yè)實(shí)現(xiàn)的功能更全面农尖;
????小程序支持模糊搜索,在符合關(guān)鍵字的搜索結(jié)果中小程序就能展現(xiàn)良哲。小程序可以與公眾號(hào)關(guān)聯(lián)盛卡,公眾號(hào)能給小程序帶來(lái)流量,同時(shí)小程序也能給公眾號(hào)帶來(lái)粉絲筑凫;
????平臺(tái)流量大:依托于微信平臺(tái)滑沧,用戶基數(shù)大,使用頻繁巍实,使得小程序在社交分享方面有天然的優(yōu)勢(shì)滓技;
????線上廣告推廣,廣告成本低棚潦,降低企業(yè)成本令漂;
????加載速度:小程序加載速度要快,小程序的基本元素是不需要加載的丸边;
????安全性:小程序因?yàn)榇a都上傳到了微信服務(wù)器上叠必,所以安全性是比較高的。
??缺點(diǎn):
????微信小程序?qū)Π笮∮邢拗泼媒眩瑔蝹€(gè)包最大不能超過(guò) 2M纬朝,這樣導(dǎo)致無(wú)法開(kāi)發(fā)一些大型的小程序。但是微信小程序正在努力解決這方面的問(wèn)題嘱吗,不斷擴(kuò)大分包的數(shù)量;
????小程序的技術(shù)框架還不穩(wěn)定,開(kāi)發(fā)方法時(shí)常有修改谒麦,導(dǎo)致短時(shí)間內(nèi)經(jīng)常要升級(jí)維護(hù)俄讹;
????不能跳轉(zhuǎn)外鏈網(wǎng)址,所以間接影響了小程序的開(kāi)放性绕德;
????不能直接分享到朋友圈患膛,少了一個(gè)重要的推廣方式;
????需要像 APP 一樣審核上架耻蛇,這點(diǎn)比 HTML5 即做即發(fā)要麻煩些踪蹬,不過(guò)審核也比較快。