uniapp高頻面試題及答案合集
談?wù)勀銓ni-app的理解
詳情請點擊此處
uni中如何為不同的平臺設(shè)置不同的代碼
使用條件注釋
條件編譯是用特殊的注釋作為標(biāo)記,在編譯時根據(jù)這些特殊的注釋,將注釋里面的代碼編譯到不同平臺。
條件注釋的作用和使用方法
uni-app 已將常用的組件、JS API 封裝到框架中,開發(fā)者按照 uni-app 規(guī)范開發(fā)即可保證多平臺兼容,大部分業(yè)務(wù)均可直接滿足。
但每個平臺有自己的一些特性,因此會存在一些無法跨平臺的情況。
- 大量寫 if else,會造成代碼執(zhí)行性能低下和管理混亂。
- 編譯到不同的工程后二次修改,會讓后續(xù)升級變的很麻煩。
在 C 語言中,通過 #ifdef、#ifndef 的方式,為 windows、mac 等不同 os 編譯不同的代碼。 uni-app 參考這個思路,為 uni-app 提供了條件編譯手段,在一個工程里優(yōu)雅的完成了平臺個性化實現(xiàn)。
條件注釋定義
條件編譯是用特殊的注釋作為標(biāo)記,在編譯時根據(jù)這些特殊的注釋,將注釋里面的代碼編譯到不同平臺。
條件注釋的語法
寫法:以 #ifdef 或 #ifndef 加 %PLATFORM% 開頭,以 #endif 結(jié)尾。
- #ifdef:if defined 僅在某平臺存在
- #ifndef:if not defined 除了某平臺均存在
- %PLATFORM%:平臺名稱
uniapp中封裝接口請求相較于微信小程序有什么要注意的
如果uniapp要在web端進行適配,要注意請求跨域問題---需要配置代理
uniapp中為什么會出現(xiàn)跨域問題,如何解決
原因
uniapp在web端進行適配時,會產(chǎn)生跨域問題
解決
配置代理
封裝統(tǒng)一的http請求
針對于uni.request我們可以沿用之前我們在小程序中的封裝思路,封裝http請求
封裝的目的
- 發(fā)送請求的時候調(diào)用更簡潔
- 添加一些通用的配置(超時時間,請求頭)。 調(diào)用者沒有傳入配置的時候用默認的,調(diào)用者傳入了相同,優(yōu)先使用調(diào)用者
- 改成使用promise解決異步問題
- 統(tǒng)一維護域名
- 添加請求攔截器,在所有請求之前加一些通用的操作
- 代碼響應(yīng)之前,進行一些通用的操作
封裝代碼
const proxy = {
"/api":{
target:"http://59.111.104.104:8086",
pathRewrite:'^/api'
}
}
//http://59.111.104.104:8086/course
/// 作用: 根據(jù)當(dāng)前的url和代理得到完整url
// 輸入: 當(dāng)前的url
// 輸出: 完整的url
function getUrl(url){
for(let key in proxy){
if(url.startsWith(key)){
// 匹配到了代理
if(proxy[key].pathRewrite){
// 需要進行前綴重寫
url = url.replace(new RegExp(proxy[key].pathRewrite),"")
}
url = proxy[key].target + url
break;
}
}
///返回處理后的url
return url;
}
function getHeader(header={}){
return {
"Content-Type":"application/x-www-form-urlencoded",
// #ifndef H5
"Cookie":uni.getStorageSync("cookie"),
// #endif
...header
}
}
function request(options){
return new Promise((reslove,reject)=>{
if(!options.header) options.header = {}
const header = getHeader(options.header);
// 請求之前進行一些操作
// 加載代理
// #ifndef H5
options.url = getUrl(options.url)
// #endif
console.log(options.url)
uni.request({
// 設(shè)置超時時間10s
timeout:10000,
...options,
header,
success(res) {
// 響應(yīng)之前進行一些操作
reslove(res)
},
fail(err) {
reject(err)
}
})
})
}
export function get(url,options){
return request({
url,
...options,
method:"GET"
})
}
export function post(url,data,options){
return request({
url,
data,
...options,
method:"POST"
})
}
//配置代理
//vue.config.js
module.exports = {
devServer: {
proxy: {
"/api": {
"target": "https://wk.myhope365.com",
"pathRewrite": {
"^/api": ""
}
}
}
}
}總結(jié)
到此這篇關(guān)于uniapp高頻面試題及答案的文章就介紹到這了,更多相關(guān)uniapp高頻面試題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談JavaScript的innerWidth與innerHeight
下面小編就為大家?guī)硪黄獪\談JavaScript的innerWidth與innerHeight。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
JavaScript 總結(jié)幾個提高性能知識點(推薦)
下面小編就為大家?guī)硪黄狫avaScript 總結(jié)幾個提高性能知識點(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
JavaScript?中的單例內(nèi)置對象Global?與?Math
這篇文章主要介紹了JavaScript?中的單例內(nèi)置對象Global與Math,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07
javaScript給元素添加多個class的簡單實現(xiàn)
下面小編就為大家?guī)硪黄猨avaScript給元素添加多個class的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07

