<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        My Github

      微信小程序開發初探

      一、關于微信小程序

      1.1 小程序誕生的背景

        張小龍說道:

        (1)一切以用戶價值為依歸→用戶是微信的核心,所以微信中沒有很多與客戶無關的功能,比如QQ中的亂七八糟一系列東西。

        (2)讓創造發揮價值→所有圍繞微信的創造比如公眾號都應該發揮其應有的價值。

        (3)用完即走的高效服務→這一點就厲害了word天,微信要打造一個以微信為中心的生態鏈,不以綁定用戶為目標。比如生活中有一些不太常用的app,我們可能一年也使用不了幾次,但是有時候就需要用到,微信就想要提供這樣一個平臺,讓你可以在微信中使用這中所謂的app的功能。或者說可以這樣理解,讓微信成為一個類似于Windows的操作系統,各種小程序就是操作系統上的應用軟件。

        (4)無形存在的商業化→微信使得人與人之間的聯系變成了無形的商業化網,這個網可以創造很多無形的商業價值。

      1.2 小程序是個什么鬼?

        張小龍在朋友圈里這樣解釋道:小程序是一種不需要下載安裝即可使用的應用,它實現了應用「觸手可及」的夢想,用戶掃一掃或搜一下即可打開應用。也體現了「用完即走」的理念,用戶不用關心是否安裝太多應用的問題。應用將無處不在,隨時可用,但又無需安裝卸載。

      1.3 技術層面的小程序

        微信小程序 = XML + CSS + JS 的移動應用程序

      1.4 為什么要開發微信小程序?

        (1)更好的給用戶提供用完即走的服務

        (2)給用戶提供更好的使用體驗

        (3)功能更加深入:https://mp.weixin.qq.com/debug/wxadoc/dev/

        (4)設計更加統一:https://mp.weixin.qq.com/debug/wxadoc/design/index.html?t=20161109

        (5)類似于微信錢包中的第三方服務

      二、開發工具的安裝

      2.1 下載微信開發者工具

        Windows 64位:點我下載

        Windows 32位:點我下載

        Mac 版 :點我下載

      2.2 安裝微信開發者工具

        這里我使用的是wechat_web_devtools_0.10.102800_x64版:

        

           

          安裝完成后,第一次啟動時會出現一個二維碼,需要使用微信掃描該二維碼才可登錄開發者工具:

      三、第一個微信小程序

      3.1 添加微信小程序項目

        Step1.選擇調試類型:本地小程序項目→添加項目

        Step2.由于我們暫時沒有AppID,所以選擇無AppID(無AppID部分功能會受限)

        Step3.進入開發者工具界面,默認是選中“調試”面板

        可以看到,在調試面板中,左側是頁面效果預覽窗口,右側是類似于Chrome的開發者的工具。在預覽窗口可以選擇一些常見的手機型號和不同的分變率,大家可以看出這簡直就是Chrome開發者工具的翻版。

      3.2 微信小程序結構一覽

        新建了一個小程序之后,開發工具為我們默認生成了一些文件,下面我們來看看這些文件都是看些什么用,以及程序結構又是什么樣子的。

        (1)項目結構

        (2)應用程序級文件

        ① app.js

      //app.js
      App({
        onLaunch: function () {
          //調用API從本地緩存中獲取數據
          var logs = wx.getStorageSync('logs') || []
          logs.unshift(Date.now())
          wx.setStorageSync('logs', logs)
        },
        getUserInfo:function(cb){
          var that = this
          if(this.globalData.userInfo){
            typeof cb == "function" && cb(this.globalData.userInfo)
          }else{
            //調用登錄接口
            wx.login({
              success: function () {
                wx.getUserInfo({
                  success: function (res) {
                    that.globalData.userInfo = res.userInfo
                    typeof cb == "function" && cb(that.globalData.userInfo)
                  }
                })
              }
            })
          }
        },
        globalData:{
          userInfo:null
        }
      })

        app.js定義了全局的一些重要事件,比如程序啟動時要做些什么,如何獲取微信用戶信息等等。App函數是一個全局函數,它的作用就是用來創建一個應用程序實例,每個應用程序都會有它的生命周期,因此一些重要的生命周期事件都會在這里定義。例如,onLaunch事件就是程序在啟動時需要干什么。

        ② app.json

      {
        "pages":[
          "pages/index/index",
          "pages/logs/logs"
        ],
        "window":{
          "backgroundTextStyle":"light",
          "navigationBarBackgroundColor": "#fff",
          "navigationBarTitleText": "Manulife WeChat Demo",
          "navigationBarTextStyle":"black"
        }
      }

        app.json 則定義了程序有哪些頁面,以及窗口標題及相關樣式等。例如,我們再這里將navigationBarTitleText屬性值改為了Manulife WeChat Demo,來看看調試窗口會顯示什么?

        ③ app.wxss

      /**app.wxss**/
      .container {
        height: 100%;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: space-between;
        padding: 200rpx 0;
        box-sizing: border-box;
      } 

        app.wxss 則定義了全局樣式,你可以把它理解為一些所有頁面公用的css樣式。其實,它也就是一個披著wxss后綴名的css3樣式表而已。

        (3)具體頁面級文件

        ① index.js

      //index.js
      //獲取應用實例
      var app = getApp()
      Page({
        data: {
          motto: 'Hello World',
          userInfo: {}
        },
        //事件處理函數
        bindViewTap: function() {
          wx.navigateTo({
            url: '../logs/logs'
          })
        },
        onLoad: function () {
          console.log('onLoad')
          var that = this
          //調用應用實例的方法獲取全局數據
          app.getUserInfo(function(userInfo){
            //更新數據
            that.setData({
              userInfo:userInfo
            })
          })
        }
      })

        每個頁面的業務邏輯都會寫在各自的js文件中,可以看到index.js中所有的業務邏輯都會寫到Page中,而app.js中所有邏輯都寫在App中。

        ② index.wxml

      <!--index.wxml-->
      <view class="container">
        <view  bindtap="bindViewTap" class="userinfo">
          <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
          <text class="userinfo-nickname">{{userInfo.nickName}}</text>
        </view>
        <view class="usermotto">
          <text class="user-motto">{{motto}}</text>
        </view>
      </view>

        index.wxml則類似于html為頁面定了一個具體的div區域,通過類似于AngularJS的模型綁定將具體的數據綁定到具體的位置。這里再回到index.js中就可以看到原來在index.js中就是為了給這些模型賦值。另外,wxml=>weixin markup language.

      wxml語法遵循XML語法,注意是XML語法,不是HTML語法,不是HTML語法,不是HTML語法

        ③ index.wxss

      /**index.wxss**/
      .userinfo {
        display: flex;
        flex-direction: column;
        align-items: center;
      }
      
      .userinfo-avatar {
        width: 128rpx;
        height: 128rpx;
        margin: 20rpx;
        border-radius: 50%;
      }
      
      .userinfo-nickname {
        color: #aaa;
      }
      
      .usermotto {
        margin-top: 200px;
      }

        index.wxss則和app.wxss一樣,都是css樣式表,只是index.wxss主要針對于index.wxml這個頁面,它有明確的作用域。另外,wxss=>weixin style sheet.

        (3)微信小程序總體結構

        我們的微信小程序會啟動時會生成一個app應用實例,這個app實例會運行多個page,每個page之間又會有一些關聯。多個page都需要用到的一些功能則封裝到公共方法中,例如util.js,calc.js等等。

      3.3 最小化編程體驗

        (1)添加一個文件夾test,新建三個頁面級文件。

             

        不要問我為什么要這樣子命名,就像我們在ASP.NET MVC中Action與View的名字要保持一致一樣,這是一個約定俗稱的事兒。當然,你也可以新建一個文件夾,不叫pages,然后在那個文件夾里邊定義這些頁面。只需要在app.json中配置成另外的文件夾即可。

        (2)修改app.json,添加頁面設置

        app.json中定義了一個pages數組,每一項代表對應頁面的【路徑+文件名】信息,數組的第一項代表小程序的初始頁面。小程序中新增/減少頁面,都需要對pages數組進行修改。因此,這里我們將剛剛的test頁面假如pages數組,并放到首位。

      "pages":[
          "pages/test/test",
          "pages/index/index",
          "pages/logs/logs"
        ]

        (3)編輯test.wxml,添加一句hello world!

        按照國際慣例,每次學習一個新的語言我們都會輸出一句hello world!來代表我們的第一個程序,因此這里也不能免俗。

      <text>Hello WeChat Little App!</text>

        (4)編輯test.wxss,添加一個樣式,為剛剛的hello world文本設置為紅色字體

      .hello
      {
          font-size: 14pt;
          color:red;
      }
      <text class="hello">Hello WeChat Little App!</text>

        (5)編輯app.js,定義一個全局使用的函數getMessage,方法很簡單,就不再多說

      App({
        // 一些自定義的額外方法
        getMessage(para){
          var result = "Your name is " + para;
          return result;
        },
        ...
        ...
      }

        (6)編輯test.js,調用全局函數,輸出控制臺

      //通過getApp方法獲取應用實例
      const app = getApp()
      
      Page({
          onLoad(){
              // 在test頁面加載時調用全局方法getMessage
              const msg = app.getMessage("Edison");
              // 在控制臺輸出msg結果
              console.log(msg);
          }
      })

        (7)編輯test.js,為頁面添加一個數據供頁面綁定

      Page({
          data:{
              errorMessage: "User name can not be null!"
          },
          onLoad(){
              ...
                      ...
          }
      })
      <text>Hello WeChat Little App!</text>
      <text class="hello">{{errorMessage}}</text>

      四、調用服務加載數據

      4.1 關于REST服務接口

        這里就可以把我們的REST服務弄出來調用啦,不過這里我們采用已有的公開的API接口來調用,比如豆瓣的各種電影、讀書等就提供了一些API可以供調用。

        這里我們選擇豆瓣電影提供的一些API,對于下面的這個list頁面,使用的是“即將上映的電影”的接口:

      4.2 添加必要文件

        添加新文件夾:list,并添加三大頁面級文件

            

      4.3 調用API發起小請求

        首先我們可以通過查看微信小程序官方開發文檔,看到發起請求的示例代碼如下:

      wx.request({
        url: 'test.php',
        data: {
           x: '' ,
           y: ''
        },
        header:{
            "Content-Type":"application/json"
        },
        success: function(res) {
           var data = res.data;
        }
      });

        因此我們依樣畫葫蘆:

      //通過getApp方法獲取應用實例
      const app = getApp()
      
      Page({
          data:{
              message:"Hello Edison",
              list:[]
          },
          onLoad(){
              const currentPage = this
              // 在list頁面加載時調用api獲取數據
              wx.request({
                  url : "https://api.douban.com/v2/movie/in_theaters",
                  data: {},
                  header:{
                      "Content-Type":"application/json"
                  },
                  success: function(res) {
                       var data = res.data;
                       currentPage.setData({
                           list : data.subjects
                       })
                    }
              })
          }
      })

        編輯list.wxml,添加一個列表:

      <text>{{message}}</text>
      <view>
          <view class="item" wx:for="{{list}}">
              <text>{{item.title}}</text>
          </view>
      </view>

        再來給每個item項設置一下樣式:

      .item
      {
          border: 1px solid #000;
          font-size:12pt;
      }

        這時可以來看看效果,電影列表被加載了出來:

        我們發現這個api還返回了電影的海報,因此我們還可以改造一下程序,在列表里邊將海報也顯示出來:

      <text>{{message}}</text>
      <view>
          <view class="item" wx:for="{{list}}">
              <image src="{{item.images.large}}"></image>
              <text>{{item.title}}</text>
          </view>
      </view>

        這里我們加了一個image標簽,注意不是html的img標簽。這時,再來看看界面效果:

      4.4 預覽你的小程序

        如果你有AppID,那么你就可以開始預覽你的小程序了:

        開發者工具左側菜單欄選擇”項目”,點擊”預覽”,掃碼后即可在微信客戶端中體驗。這里我們是無AppID的體驗模式,因此沒法預覽,更沒法上傳。

      五、豆瓣電影示例項目

      5.1 項目地址

        這個項目是我看的一個公開課的講師汪磊寫的一個demo,功能雖小但五臟俱全,是一個拿來學習練手的小項目。

      GitHub倉庫地址:https://github.com/zce/weapp-demo

      5.2 項目功能

        前方流量預警,gif動圖,你懂得:

      demo show

      5.4 學習計劃

        汪磊專門為這個demo設置了一些分支,每個分支循序漸進,實現了不同的功能。我們可以跟著這個計劃,一步一步得去完成這個demo。

      六、小結

        本篇了解微信小程序是個什么鬼,最基本的小程序結構是什么樣子的,還按照國際慣例做了一個hello world,并調用了一次api。雖然過程很簡單很low,但前端程序包括app不就是做的這些事兒嗎?后續我會跟著汪磊的demo一步一步得把那個豆瓣項目寫出來,或許會分享一篇新的文章跟各位見面。好了,很久沒有熬過夜了,今天就到此結束啦。

      參考資料

      (1)汪磊,《微信小程序公開課

      (2)汪磊,《微信小程序基礎入門

      (3)勞卜,《通過微信小程序看前端

      (4)白琦,《一篇文章讀懂微信小程序是什么

      (5)官方文檔,https://mp.weixin.qq.com/debug/wxadoc/dev/

       

      posted @ 2016-11-22 01:31  EdisonZhou  閱讀(24943)  評論(5)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品久久麻豆蜜桃| 国产AV影片麻豆精品传媒| 蜜臀av久久国产午夜| 黑人大战中国av女叫惨了| 国产精一区二区黑人巨大| 久热综合在线亚洲精品| 一边添奶一边添p好爽视频| 亚洲成人av一区免费看| 国产不卡精品视频男人的天堂 | 国产超碰人人做人人爱ⅴa| 日韩V欧美V中文在线| 久久亚洲精品亚洲人av| 97精品伊人久久久大香线蕉| 国产亚洲精品第一综合| 亚洲精品一区二区毛豆| 特黄大片又粗又大又暴| 色综合天天综合网国产人| 国产精品成人高潮av| 精品中文字幕人妻一二| 一本久道久久综合中文字幕| 国产亚洲av手机在线观看| 国内视频偷拍久久伊人网| 亚洲精品综合网二三区| 成人做受120秒试看试看视频 | 亚洲色一区二区三区四区| 国产精品自拍自在线播放| 在线中文字幕国产精品| 国产亚洲精品VA片在线播放| 色成人精品免费视频| 欧美精品亚洲精品日韩专| 精品无码国产一区二区三区AV| 国产亚洲综合一区二区三区| 精品国产一区二区三区四区| 国产精品国产精品偷麻豆| 激情 自拍 另类 亚洲| 国产精品一区二区中文| 高清国产亚洲精品自在久久| 亚洲 自拍 另类小说综合图区| 精品熟女少妇免费久久| 国产免费AV片在线看| 亚洲精品国产综合久久一线|