關(guān)于Android的技術(shù)博客好久沒(méi)更新了,為什么呢?答案是由于公司業(yè)務(wù)需求,從一個(gè)Android移動(dòng)端攻城獅轉(zhuǎn)變成了一個(gè)寫小程序的前端攻城獅。愛掏網(wǎng) - it200.com雖然小程序上手比較容易,但是,這個(gè)是相對(duì)的————前端攻城獅上手比較容易。愛掏網(wǎng) - it200.com而對(duì)于移動(dòng)端,那絕對(duì)的是nonono~了。愛掏網(wǎng) - it200.com 相信如果是從Android轉(zhuǎn)過(guò)去的,會(huì)有各種的吐槽。愛掏網(wǎng) - it200.com不僅僅是語(yǔ)法的規(guī)范,語(yǔ)法簡(jiǎn)直弱爆了,還有編譯器的問(wèn)題。愛掏網(wǎng) - it200.com微信web開發(fā)工具相對(duì)于Android Studio,不管是代碼補(bǔ)全,還是快捷鍵、插件的使用,尤其是不能查看源碼,這就太low了。愛掏網(wǎng) - it200.com這個(gè)時(shí)候還是特別感謝自己是一個(gè)Android攻城獅了。愛掏網(wǎng) - it200.com吐槽部分就此告一段落,接下來(lái)我將會(huì)從一個(gè)初學(xué)者的身份,當(dāng)然,此后的文章不會(huì)對(duì)小程序的知識(shí)點(diǎn)一一都做很細(xì)致的介紹,主要是對(duì)比Android的一些思想,進(jìn)行一些個(gè)人的想法闡述。愛掏網(wǎng) - it200.com 點(diǎn)擊我查看完整項(xiàng)目
api語(yǔ)法的介紹
一、盒子模型Flex
1、flex-wrap:
nowrap(默認(rèn)):不換行。愛掏網(wǎng) - it200.comwrap:換行,第一行在上方。愛掏網(wǎng) - it200.comwrap-reverse:換行,第一行在下方。愛掏網(wǎng) - it200.com
2、justify-content: 所有子view在父View顯示的位置
flex-start(默認(rèn)值):左對(duì)齊
flex-end:右對(duì)齊
center:居中
*space-between:兩端對(duì)齊,項(xiàng)目之間的間隔都相等。愛掏網(wǎng) - it200.com因此這個(gè)可以認(rèn)為是設(shè)置權(quán)重布局,每個(gè)子View占一份。愛掏網(wǎng) - it200.com如果子View只有一個(gè),則等同于flex-start
*space-around:平均分布在該行上,兩邊留有一半的間隔空間。愛掏網(wǎng) - it200.com項(xiàng)目之間的間隔比項(xiàng)目與邊框的間隔大一倍。愛掏網(wǎng) - it200.com如果(作用在父view上)只有一個(gè)子view,則其實(shí)就是讓子View居中對(duì)齊
space-between屬性圖形展示:
3、align-content
內(nèi)容居中。愛掏網(wǎng) - it200.com只適用于多行的flex容器,單行不起作用flex-start:與交叉軸的起點(diǎn)對(duì)齊。愛掏網(wǎng) - it200.comflex-end:與交叉軸的終點(diǎn)對(duì)齊。愛掏網(wǎng) - it200.comcenter:與交叉軸的中點(diǎn)對(duì)齊。愛掏網(wǎng) - it200.comspace-between:與交叉軸兩端對(duì)齊,軸線之間的間隔平均分布。愛掏網(wǎng) - it200.comspace-around:每根軸線兩側(cè)的間隔都相等。愛掏網(wǎng) - it200.com所以,軸線之間的間隔比軸線與邊框的間隔大一倍。愛掏網(wǎng) - it200.comstretch(默認(rèn)值):軸線占滿整個(gè)交叉軸。愛掏網(wǎng) - it200.com
4、align-items
讓每個(gè)View在父view的對(duì)齊方式。愛掏網(wǎng) - it200.com適用于所有的flex容器。愛掏網(wǎng) - it200.comflex-start:交叉軸的起點(diǎn)對(duì)齊。愛掏網(wǎng) - it200.comflex-end:交叉軸的終點(diǎn)對(duì)齊。愛掏網(wǎng) - it200.comcenter:交叉軸的中點(diǎn)對(duì)齊。愛掏網(wǎng) - it200.combaseline: 項(xiàng)目的第一行文字的基線對(duì)齊。愛掏網(wǎng) - it200.comstretch(默認(rèn)值):如果項(xiàng)目未設(shè)置高度或設(shè)為auto,將占滿整個(gè)容器的高度。愛掏網(wǎng) - it200.com
5、示例
1)讓容器的子View居中顯示在容器(父View)中添加:display: flex;align-items: center;2)讓一個(gè)View布局顯示在最底層,或者最上層,類似于FramLayout布局使用z-index屬性:
{position:absolute;left:0px;top:0px;z-index:-1;}注意:1)z-index只能在absolute 中起作用2)z-index:-1,被修飾的該View在最底層顯示(可以作為背景)z-index:1 ,在最外層顯示
二、js相關(guān)的api
1、變量
我們知道,在Java中,如果是在整個(gè)類中需要用到的對(duì)象,我們將在類中聲明為成員變量,在某個(gè)具體方法中有效的聲明為局部變量。愛掏網(wǎng) - it200.com那么對(duì)應(yīng)的小程序是:
var:java中的成員變量
let:java中局部變量
2、基本數(shù)據(jù)類型Boolean
var test0 = "" //falsevar test1 = "aaaaaaaa" // truevar test2 = null // falsevar test3 = 11 // truevar test4 = 0 // falsevar test5 = {} // true總結(jié):這個(gè)與java區(qū)別還是很大的1)對(duì)于數(shù)字型(int、float),只要是非0的數(shù)字都是true;2)對(duì)于字符串(String),只有是null、和“”空串才是false,其他都是false3)對(duì)于對(duì)象,除了對(duì)象是null才是false,其他都是true。愛掏網(wǎng) - it200.com哪怕這個(gè)對(duì)象是一個(gè)空的對(duì)象{}
3、函數(shù)
(1)函數(shù)定義 在page中定義:
onShow: function (params) {//方法體},
非page中定義:
function test(params){//方法體
}
總結(jié): 1.第一種定義必須在最后面要加“,”逗號(hào),而第二種方式不能加 2.與java不同的是,函數(shù)的參數(shù)params不用指定類型,所以,理論上調(diào)用方法的時(shí)候可以傳遞任意類型。愛掏網(wǎng) - it200.com但是一般不這么做。愛掏網(wǎng) - it200.com個(gè)人認(rèn)為還是java嚴(yán)謹(jǐn)更好,可讀性強(qiáng)。愛掏網(wǎng) - it200.com 3.參數(shù)params的個(gè)數(shù)沒(méi)有限制
(2)回調(diào)函數(shù) 1)函數(shù)定義
function request(onFail){//調(diào)用接口wx.request({success: function (res) { //接口返回?cái)?shù)據(jù)onFail(res)})}
2)函數(shù)調(diào)用
wx.cyou.cache.getCacheValue("key_test", function(result){console.log("result==", result)})
(3)注意事項(xiàng)
1)小程序不支持函數(shù)的重載和函數(shù)的重寫
2)函數(shù)調(diào)用函數(shù)的時(shí)候,函數(shù)方法不支持直接傳遞。愛掏網(wǎng) - it200.com看下面的示例:
function request1(function1) {request2(function1)}問(wèn)題: 這在request1方法調(diào)用request2的時(shí)候,參數(shù)也是一個(gè)函數(shù)function1,直接將function1傳遞給request2是不可以的解決方式:function request1(function1) {request2(new function{function1()}})}在request2方法的回調(diào)函數(shù)中去調(diào)用function1方法
4、對(duì)象的變量
class Person{String name;int age;
}
在java中,如果要遍歷獲取Person屬性值name、age,和屬性類型String、int。愛掏網(wǎng) - it200.com都是用反射去實(shí)現(xiàn)的。愛掏網(wǎng) - it200.com那么,在小程序中卻比java 簡(jiǎn)單粗暴很多。愛掏網(wǎng) - it200.com具體實(shí)現(xiàn)
for (var propertyName in Person){var name = propertyName //對(duì)象Person的屬性(String、int)var value = testInfo[propertyName] // 對(duì)象Person的屬性值(name、age)}
5、export使用
在調(diào)用一個(gè)類中的方法或者屬性值時(shí),必須要在被調(diào)用的方法和屬性值,定義的時(shí)候用export聲明
6、disableScroll使用
問(wèn)題描述: 有時(shí)候,小程序跑在蘋果手機(jī)上時(shí),會(huì)左右滑動(dòng)退出,也會(huì)上下滑動(dòng),這樣體驗(yàn)不好。愛掏網(wǎng) - it200.com這個(gè)時(shí)候要禁止滑動(dòng)。愛掏網(wǎng) - it200.com
在app.json中,將disableScroll值設(shè)置為true 就可以了:"window": {"disableScroll": true}
7、頁(yè)面page數(shù)據(jù)的獲取與設(shè)置
let pages = getCurrentPages()let curPage = pages[pages.length - 1] //獲取當(dāng)前頁(yè)面if (curPage.route == url){ //比較獲取的頁(yè)面的url是否跟實(shí)際的一致(如url:"pages/order/order")curPage.setData({ //設(shè)置數(shù)據(jù)usingOrderList: usingOrderList})}
8、獲取所有的頁(yè)面
let pages = getCurrentPages()// 獲取上一個(gè)頁(yè)面let prePage = pages[pages.length - 2]//給頁(yè)面設(shè)置數(shù)據(jù)prePage.setData({refreshUserInfo:true})//返回到上一個(gè)頁(yè)面wx.navigateBack({delta: 1})
注意事項(xiàng): 調(diào)用getCurrentPages()不需要在page環(huán)境中(可以視為Android中的Context環(huán)境),可以在任何地方直接獲取,即util等自定義類中同樣生效。愛掏網(wǎng) - it200.com類似的還有wx.開頭的方法
9、showToast時(shí)長(zhǎng)設(shè)置失效問(wèn)題
let title = new String(msg)//延時(shí)彈toast,是為了解決有時(shí)候在接口請(qǐng)求后,設(shè)置的duration時(shí)間不起作用setTimeout(function () {wx.showToast({title: title,duration: 1200,icon: "none"})}, 100)
10、reLaunch跳轉(zhuǎn)失效問(wèn)題
//延時(shí)跳轉(zhuǎn),是為了解決有時(shí)候wx.reLaunch不起作用,設(shè)置的時(shí)間不起作用setTimeout(function(){wx.reLaunch({url: '/pages/home/home'})},100)
以上對(duì)于小白相信是很實(shí)用的一些知識(shí)。愛掏網(wǎng) - it200.com下一篇繼續(xù)講解關(guān)于小程序中,代碼冗余、解耦的問(wèn)題分析,以及解決策略。愛掏網(wǎng) - it200.com
轉(zhuǎn):https://juejin.im/post/5b9cce5e5188255c304fe14d