微信小程序開發(fā)分享

1.在微信官網(wǎng)下載開發(fā)工具

2.新建小程序項目


---AppID:如果有就填寫,如果沒有點擊綠色文字跳過填寫,(沒有也可以開發(fā)只不過沒有在手機預(yù)覽的功能);
---項目名稱:命名一個簡單明了的名稱;
---項目目錄:選擇一個開發(fā)的文件夾,此時項目目錄下方會出現(xiàn)一個創(chuàng)建quick start項目的選項,這里可以快速幫你構(gòu)建一個項目的完整目錄,不建議取消勾選。(如果要打開其他人的demo需要選擇到pages文件夾的上一層級,不然無法顯示);
---點擊添加項目進行下一步;
Tips:在設(shè)置中有設(shè)置代理選項,注意在這里如果設(shè)置了代理,有可能在編輯器內(nèi)顯示空白;

3.小程序結(jié)構(gòu)簡介


其中,.wxml 是頁面的結(jié)構(gòu)文件,.js后綴的是腳本文件,.json后綴的文件是配置文件,.wxss后綴的是樣式表文件。

├───app.js // 小程序邏輯
├───app.json // 小程序公共設(shè)置
├───app.wxss // 小程序公共樣式
├───utils // 用來放置工具類js文件
│ └───utils.js // 工具類js
└───pages // 項目頁面開發(fā)目錄,里面的每個子目錄代表一個獨立頁面
├───index // index 頁面目錄
│ ├───index.js // index 頁面邏輯
│ ├───index.wxml // index 頁面結(jié)構(gòu)
│ └───index.wxss // index 頁面樣式表
└───logs // logs 頁面目錄
├───logs.js // logs 頁面邏輯
├───logs.json // logs 頁面數(shù)據(jù)
├───logs.wxml // logs 頁面結(jié)構(gòu)
└───logs.wxss // logs 頁面樣式表

在pages中建立的頁面都需要在根目錄下的app.json聲明,相當(dāng)于設(shè)置路由,其他公共設(shè)置也需要在這里設(shè)置;官方教程

<!--js-->
  "pages":[
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle":"black"
  }
}
Tips:

---數(shù)組的第一項代表小程序的初始頁面;
---小程序中新增/減少頁面,都需要對 pages 數(shù)組進行修改,特別的,如果減少頁面但是未修改pages的數(shù)組,編譯會拋出異常;
---在這里修改數(shù)組后框架會自行去尋找路徑中的文件,如果路徑中的json文件內(nèi)容為空的話,會拋出異常;
---同樣的,路徑中js為空也會拋出“Page調(diào)用異常”的錯誤,所以要在js中加入“Page({})”;

4小程序開發(fā)

4.1.數(shù)據(jù)綁定官方教程

微信小程序數(shù)據(jù)綁定使用"Mustache"語法(雙大括號)將變量包起來;

<!--wxml-->
<view> {{message}} </view>
<!--js-->
Page({
  data: {
    message: 'Hello MINA!'
  }
})

當(dāng)需要展示一組數(shù)據(jù)時,可以使用wx:for;更多使用方法

<view wx:for="{{array}}" wx:for-item="item">
  {{index}}: {{item.message}}
</view>

Tips:默認數(shù)組的當(dāng)前項的下標變量名默認為index,數(shù)組當(dāng)前項的變量名默認為item

<!--js-->
Page({
  data: {
    array: [{
      message: 'foo',
    }, {
      message: 'bar'
    }]
  }
})
取值傳值方式

1.列表index下標取值,并且在頁面?zhèn)髦?br> 實現(xiàn)方式是:data-index="{{index}}"賦值及e.currentTarget.dataset.index來獲取即可;
從服務(wù)列表頁中傳服務(wù)id到服務(wù)詳情頁面,以獲取服務(wù)詳情信息;
server/list頁面實現(xiàn)以下代碼

<!--wxml-->
      <view bindtap="detailmovie" id="{{item.id}}">
        <view class="move-min">
          <view class="move-image">
              <image src="{{item.images.large}}"></image>
          </view>
          <view class="title">{{item.title}}</view>
        </view>
      </view>
<!--js-->
  detailmovie: function (e) {
    //使用currentTarget獲取id
    var id = e.currentTarget.id;
//把獲取到的id存在全局變量中,下一個頁面直接調(diào)用;
    app.requestDetailid = id;
    console.log(id);
    //一個應(yīng)用同時只能打開5個頁面,當(dāng)已經(jīng)打開了5個頁面之后,wx.navigateTo不能正常打開新頁面。請避免多層級的交互方式,或者使用wx.redirectTo,
    wx.navigateTo({
      url: '../detail/detail',
    })
  },

頁面實現(xiàn)onLoad(options)方法,從url路徑中獲取objectId;

<!--js-->
onLoad: function (options) {
  var objectId = options.objectId
}

2.form表單取值
通過<form bindsubmit="formSubmit">與<button formType="submit">標簽配合使用
布局如下:

<!--wxml-->
<form bindsubmit="formSubmit">
  <input name="detail" placeholder="詳情地址" />
  <input name="realname" placeholder="收件人姓名" />
  <input name="mobile" placeholder="手機號碼" type="number"/>
  <button formType="submit" type="primary">Submit</button>
</form>
<!--js-->
formSubmit: function(e) {
  // detail
  var detail = e.detail.value.detail;
  // realname
  var realname = e.detail.value.realname;
  // mobile
  var mobile = e.detail.value.mobile;
}

通過<input bindconfirm="realnameConfirm">實現(xiàn)

<!--js-->
realnameConfirm: function(e) {
  var realname = e.detail.value;
}
Tips:

1: 視圖層嵌入的是{{message}}而不是{{data.message}},微信框架默認設(shè)定視圖層綁定的變量定義在Page對象的data屬性中,也就是說,如果變量需要綁定到視圖層,一定要定義data屬性中;

2: 通過調(diào)用Page對象的setData(Page對象預(yù)定義)方法,可以更新界面數(shù)據(jù),但是直接設(shè)置變量是無效的,因此對于綁定到視圖層的變量,要永遠使用setData方法來設(shè)置變量值;

4.2.文件引入

為了提升體驗流暢度,編譯后的代碼包大小需小于 1MB ,大于 1MB 的代碼包將上傳失敗

1.1 WXML

WXML提供兩種文件引入方式,import和include。區(qū)別在于:import可以引入定義好的template模板,模板是有作用域的;而include就是拷貝一個公用的代碼片段到目標文件中,適合做公共頁面片的拆分。

import可以在該文件中使用目標文件定義的template,如:
在 item.wxml 中定義了一個叫item的template:

<!-- item.wxml -->
<template name="item">
  <text>{{text}}</text>
</template>

在 index.wxml 中引用了 item.wxml,就可以使用item模板:

<import src="item.wxml"/>
<template is="item" data="{{text: 'forbar'}}"/>

Tips:
import 有作用域的概念,即只會 import 目標文件中定義的 template,而不會 import 目標文件 import 的 template。

如:C import B,B import A,在C中可以使用B定義的template,在B中可以使用A定義的template,但是C不能使用A定義的template。

<!-- A.wxml -->
<template name="A">
  <text> A template </text>
</template>
<!-- B.wxml -->
<import src="a.wxml"/>
<template name="B">
  <text> B template </text>
</template>
<!-- C.wxml -->
<import src="b.wxml"/>
<template is="A"/>  <!-- Error! Can not use tempalte when not import A. -->
<template is="B"/>
1.2 wxss

小程序支持樣式的@import引入方式

import "../../wxss/common.wxss";
```
######Tips:
定義在 app.wxss 中的樣式為全局樣式,作用于每一個頁面。在 page 的 wxss 文件中定義的樣式為局部樣式,只作用在對應(yīng)的頁面,并會覆蓋 app.wxss 中相同的選擇器。

小程序支持的選擇器在官方公布的文檔中包括.class、#id、 element、element,element、::after(注意是雙冒號)、::before這6種選擇器。 

經(jīng)過測試,小程序?qū)τ?first-child、:last-child、.class-a .class-b{},甚至更多層級的嵌套都是支持的。 
不過官方并不推薦級聯(lián)的這種寫法,因為考慮到后面切Native的擴展可能,會沒辦法支持級聯(lián)選擇。 
所以保險起見,不建議.class-a .class-b{}這種級聯(lián)的寫法,以免后期工具過濾導(dǎo)致頁面錯亂。

WXSS支持的單位有px、rem和rpx,其中rem和rpx可以針對屏幕容器進行適配,px則為固定尺寸。 
其中1rpx=0.5px,在WXSS和WXML中定義的rpx單位最終會轉(zhuǎn)換為在手機端可以識別的rem單位。 
![HTML5與小程序標簽差別](http://upload-images.jianshu.io/upload_images/4357202-dac8f1707098ebb2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Tips:navigator僅支持5級頁面的跳轉(zhuǎn); navigator不可跳轉(zhuǎn)到小程序外的鏈接地址;[官方教程](https://mp.weixin.qq.com/debug/wxadoc/dev/component/navigator.html)
小程序的image與HTML5的img最大的區(qū)別在于:小程序的image是按照background-image來實現(xiàn)的。 默認image的高寬是320*240。必須通過樣式定義去覆蓋這個默認高寬,auto在這里不生效。[官方教程](https://mp.weixin.qq.com/debug/wxadoc/dev/component/image.html)

####4.3.API的使用
#####1wx.request[官方教程](https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html)
wx.request ≈ ajax;
```
wx.request({
  url: 'test.php', //僅為示例,并非真實的接口地址
  data: {
     x: '' ,
     y: ''
  },
  header: {
      'content-type': 'application/json'
  },
  success: function(res) {
    console.log(res.data)
  }
})
```
微信小程序POST請求服務(wù)端獲取不到參數(shù)
1.需要把Content-type改成‘a(chǎn)pplication/x-www-form-urlencoded’才可以正常獲取
2.修改Content-type后,請求參數(shù)不會自動序列化,需要使用JSON.stringify轉(zhuǎn)化字符串才可以正常請求
客戶端
```
wx.request({
  url: '/index',
  method: 'POST',
  data: {
    answer: JSON.stringify(needData),
  },
  header: { "content-type": "application/x-www-form-urlencoded" },
  dataType: "json",
 success: function (data) {
      that.setData({
          showLoading: false,
          data: data.data,
        });
     },
});
```
服務(wù)器端
```
    public function answer(){
        $answer=I('post.answer');
        $answer=htmlspecialchars_decode($answer);
        $answer=json_decode($answer);
    }
```
Tips: wx.request發(fā)起的是 HTTPS 請求。HTTP請求只能在本地預(yù)覽,若要在真機預(yù)覽需要打開調(diào)試模式;
[微信豆瓣小程序demo下載地址](https://github.com/wulitang/wxapp.git)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,462評論 2 378

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