第一篇:小程序之語法篇

關(guān)于Android的技術(shù)博客好久沒更新了蚓土,為什么呢?答案是由于公司業(yè)務(wù)需求赖淤,從一個Android移動端攻城獅轉(zhuǎn)變成了一個寫小程序的前端攻城獅。雖然小程序上手比較容易谅河,但是咱旱,這個是相對的————前端攻城獅上手比較容易。而對于移動端绷耍,那絕對的是nonono~了吐限。
相信如果是從Android轉(zhuǎn)過去的,會有各種的吐槽褂始。不僅僅是語法的規(guī)范诸典,語法簡直弱爆了,還有編譯器的問題崎苗。微信web開發(fā)工具相對于Android Studio,不管是代碼補(bǔ)全狐粱,還是快捷鍵、插件的使用胆数,尤其是不能查看源碼肌蜻,這就太low了。這個時候還是特別感謝自己是一個Android攻城獅了必尼。吐槽部分就此告一段落蒋搜,接下來我將會從一個初學(xué)者的身份,當(dāng)然判莉,此后的文章不會對小程序的知識點一一都做很細(xì)致的介紹豆挽,主要是對比Android的一些思想,進(jìn)行一些個人的想法闡述券盅。
點擊我查看完整項目

api語法的介紹

一帮哈、盒子模型Flex

1、flex-wrap:

  nowrap(默認(rèn)):不換行渗饮。
  wrap:換行但汞,第一行在上方宿刮。
  wrap-reverse:換行,第一行在下方私蕾。

2僵缺、justify-content: 所有子view在父View顯示的位置

flex-start(默認(rèn)值):左對齊
flex-end:右對齊
center:居中
*space-between:兩端對齊,項目之間的間隔都相等踩叭。因此這個可以認(rèn)為是設(shè)置權(quán)重布局磕潮,每個子View占一份。如果子View只有一個容贝,則等同于flex-start
*space-around:平均分布在該行上自脯,兩邊留有一半的間隔空間。項目之間的間隔比項目與邊框的間隔大一倍斤富。如果(作用在父view上)只有一個子view膏潮,則其實就是讓子View居中對齊

space-between屬性圖形展示:


justify-content.jpg

3、align-content

  內(nèi)容居中满力。只適用于多行的flex容器焕参,單行不起作用
   flex-start:與交叉軸的起點對齊。
   flex-end:與交叉軸的終點對齊油额。
   center:與交叉軸的中點對齊叠纷。
   space-between:與交叉軸兩端對齊,軸線之間的間隔平均分布潦嘶。
   space-around:每根軸線兩側(cè)的間隔都相等涩嚣。所以,軸線之間的間隔比軸線與邊框的間隔大一倍掂僵。
   stretch(默認(rèn)值):軸線占滿整個交叉軸航厚。

4、align-items

讓每個View在父view的對齊方式看峻。適用于所有的flex容器阶淘。
  flex-start:交叉軸的起點對齊。
  flex-end:交叉軸的終點對齊互妓。
  center:交叉軸的中點對齊溪窒。
  baseline: 項目的第一行文字的基線對齊。
  stretch(默認(rèn)值):如果項目未設(shè)置高度或設(shè)為auto冯勉,將占滿整個容器的高度澈蚌。

5、示例

1)讓容器的子View居中顯示
  在容器(父View)中添加:
          display: flex;
          align-items: center;
          
 2)讓一個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中,如果是在整個類中需要用到的對象杯活,我們將在類中聲明為成員變量匆帚,在某個具體方法中有效的聲明為局部變量。那么對應(yīng)的小程序是:
var:java中的成員變量
let:java中局部變量

2旁钧、基本數(shù)據(jù)類型Boolean

    var test0 = ""            //false
    var test1 = "aaaaaaaa"   // true
    var test2 = null          // false
    var test3 = 11           // true
    var test4 = 0            // false
    var test5 = {}           // true
    總結(jié):這個與java區(qū)別還是很大的
    1)對于數(shù)字型(int吸重、float),只要是非0的數(shù)字都是true;
    2)對于字符串(String),只有是null歪今、和“”空串才是false嚎幸,其他都是false
    3)對于對象,除了對象是null才是false寄猩,其他都是true嫉晶。哪怕這個對象是一個空的對象{}

3、函數(shù)

(1)函數(shù)定義
在page中定義:

  onShow: function (params) {
    //方法體
  },

非page中定義:

function test(params){
    //方法體
}

總結(jié):
1.第一種定義必須在最后面要加“,”逗號田篇,而第二種方式不能加
2.與java不同的是车遂,函數(shù)的參數(shù)params不用指定類型,所以斯辰,理論上調(diào)用方法的時候可以傳遞任意類型。但是一般不這么做坡疼。個人認(rèn)為還是java嚴(yán)謹(jǐn)更好彬呻,可讀性強(qiáng)。
3.參數(shù)params的個數(shù)沒有限制

(2)回調(diào)函數(shù)
1)函數(shù)定義

  function request(onFail){
  //調(diào)用接口
      wx.request({
        success: function (res) { //接口返回數(shù)據(jù)
         onFail(res)
      })
    }

2)函數(shù)調(diào)用

             wx.cyou.cache.getCacheValue("key_test", function(result){
                console.log("result==", result)
            })

(3)注意事項
>1)小程序不支持函數(shù)的重載和函數(shù)的重寫
>2)函數(shù)調(diào)用函數(shù)的時候柄瑰,函數(shù)方法不支持直接傳遞闸氮。看下面的示例:

   function request1(function1) {
          request2(function1)
        }
       問題: 這在request1方法調(diào)用request2的時候教沾,參數(shù)也是一個函數(shù)function1蒲跨,直接將function1傳遞給request2是不可以的

       解決方式:
        function request1(function1) {
          request2(new function{
              function1()

          }})
        }

        在request2方法的回調(diào)函數(shù)中去調(diào)用function1方法

4、對象的變量

class Person{
  String name;
  int age;
}

在java中授翻,如果要遍歷獲取Person屬性值name或悲、age,和屬性類型String堪唐、int巡语。都是用反射去實現(xiàn)的。那么淮菠,在小程序中卻比java 簡單粗暴很多男公。具體實現(xiàn)

for (var propertyName in Person){
           var name = propertyName               //對象Person的屬性(String、int)
           var value = testInfo[propertyName]    // 對象Person的屬性值(name合陵、age)
        }

5枢赔、export使用

在調(diào)用一個類中的方法或者屬性值時澄阳,必須要在被調(diào)用的方法和屬性值,定義的時候用export聲明

6踏拜、disableScroll使用

問題描述:
有時候碎赢,小程序跑在蘋果手機(jī)上時,會左右滑動退出执隧,也會上下滑動揩抡,這樣體驗不好。這個時候要禁止滑動镀琉。

 在app.json中峦嗤,將disableScroll值設(shè)置為true 就可以了:
  "window": {
          "disableScroll": true
      }

7、頁面page數(shù)據(jù)的獲取與設(shè)置

  let pages = getCurrentPages()
          let curPage = pages[pages.length - 1]         //獲取當(dāng)前頁面
          if (curPage.route == url){        //比較獲取的頁面的url是否跟實際的一致(如url:"pages/order/order")
            curPage.setData({                                //設(shè)置數(shù)據(jù)
              usingOrderList: usingOrderList
            })
          }

8屋摔、獲取所有的頁面

          let pages = getCurrentPages()
            // 獲取上一個頁面
          let prePage = pages[pages.length - 2]
          //給頁面設(shè)置數(shù)據(jù)
          prePage.setData({
            refreshUserInfo:true
          })
          //返回到上一個頁面
          wx.navigateBack({
            delta: 1
          })

注意事項:
調(diào)用getCurrentPages()不需要在page環(huán)境中(可以視為Android中的Context環(huán)境)烁设,可以在任何地方直接獲取,即util等自定義類中同樣生效钓试。類似的還有wx.開頭的方法

9装黑、showToast時長設(shè)置失效問題

  let title = new String(msg)
  //延時彈toast,是為了解決有時候在接口請求后,設(shè)置的duration時間不起作用
  setTimeout(function () {
    wx.showToast({
      title: title,
      duration: 1200,
      icon: "none"
    })
  }, 100)

10弓熏、reLaunch跳轉(zhuǎn)失效問題

     //延時跳轉(zhuǎn),是為了解決有時候wx.reLaunch不起作用恋谭,設(shè)置的時間不起作用
    setTimeout(function(){
      wx.reLaunch({
        url: '/pages/home/home'
      })
    },100)

以上對于小白相信是很實用的一些知識。下一篇繼續(xù)講解關(guān)于小程序中挽鞠,代碼冗余疚颊、解耦的問題分析,以及解決策略信认。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末材义,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嫁赏,更是在濱河造成了極大的恐慌其掂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潦蝇,死亡現(xiàn)場離奇詭異款熬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)攘乒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門华烟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人持灰,你說我怎么就攤上這事盔夜。” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵喂链,是天一觀的道長返十。 經(jīng)常有香客問我,道長椭微,這世上最難降的妖魔是什么洞坑? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蝇率,結(jié)果婚禮上迟杂,老公的妹妹穿的比我還像新娘。我一直安慰自己本慕,他們只是感情好排拷,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锅尘,像睡著了一般监氢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藤违,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天浪腐,我揣著相機(jī)與錄音,去河邊找鬼顿乒。 笑死议街,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的璧榄。 我是一名探鬼主播傍睹,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼犹菱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吮炕,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腊脱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后龙亲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陕凹,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年鳄炉,在試婚紗的時候發(fā)現(xiàn)自己被綠了杜耙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拂盯,死狀恐怖佑女,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤团驱,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布摸吠,位于F島的核電站,受9級特大地震影響嚎花,放射性物質(zhì)發(fā)生泄漏寸痢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一紊选、第九天 我趴在偏房一處隱蔽的房頂上張望啼止。 院中可真熱鬧,春花似錦兵罢、人聲如沸献烦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仿荆。三九已至,卻和暖如春坏平,著一層夾襖步出監(jiān)牢的瞬間拢操,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工舶替, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留令境,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓顾瞪,卻偏偏與公主長得像舔庶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陈醒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容