創建項目
微信開發工具深入介紹
https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html
基本項目目錄
1. 配置介紹
一個小程序應用程序會包括最基本的兩種配置文件。一種是全局的 app.json
和 頁面自己的 page.json
注意:配置文件中不能出現注釋
1.1. 全局配置app.json
app.json
是當前小程序的全局配置,包括了小程序的所有頁面路徑、界面表現、網絡超時時間、底部 tab 等。普通快速啟動項目里邊的 app.json
配置
{ "pages":[ "pages/index/index", "pages/logs/logs" ], "window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "WeChat", "navigationBarTextStyle":"black" } }
-
pages
字段 —— 用於描述當前小程序所有頁面路徑,這是為了讓微信客戶端知道當前你的小程序頁面定義在哪個目錄。 -
window
字段 —— 定義小程序所有頁面的頂部背景顏色,文字顏色定義等。 - 完整的配置信息請參考 https://developers.weixin.qq.com/miniprogram/dev/framework/config.html
這里的 page.json
其實用來表示頁面目錄下的 page.json
這類和小程序頁面相關的配置。
開發者可以獨立定義每個頁面的一些屬性,如頂部顏色、是否允許下拉刷新等等。
頁面的配置只能設置 app.json
中部分 window
配置項的內容,頁面中配置項會覆蓋 app.json
的 window
中相同的配置項。
視圖層
數據綁定
普通寫法
<view> {{ message }} </view>
Page({ data: { message: 'Hello MINA!' } })
<view id="item-{{id}}"> </view>
Page({ data: { id: 0 } })
不要直接寫 checked="false",其計算結果是一個字符串
<checkbox checked="{{false}}"> </checkbox>
<view hidden="{{flag ? true : false}}"> Hidden </view>
<view> {{a + b}} + {{c}} + d </view>
Page({ data: { a: 1, b: 2, c: 3 } })
<view wx:if="{{length > 5}}"> </view>
<view>{{"hello" + name}}</view>
Page({ data:{ name: 'MINA' } })
下標變量名默認為 index
wx:for-index
可以指定數組當前下標的變量名 index是索引
<view wx:for="{{array}}"> {{index}}: {{item.message}} </view>
Page({ data: { array: [{ message: 'foo', }, { message: 'bar' }] } })
渲染一個包含多節點的結構塊 block最終不會變成真正的dom元素
<block wx:for="{{[1, 2, 3]}}"> <view> {{index}}: </view> <view> {{item}} </view> </block>
<view wx:for="{{array}}" wx:for-item="val" wx:for-index="key" wx:key="jiakuai"> <view>{{index +"索引 val是值" + key}}: {{val.message}}</view> <view>{{index +"索引" + key}}: {{val.id}}</view> </view>
array:[{ "id": 1,"message":"jllklk"},{ "id":2, "message":"klj"}]
事件
<button bindtap="click">按鈕</button> <button bindlongtap="longclick">長按按鈕</button>
// click:function(e){ // console.log('lllll') // console.log(e) // }, // longclick:function(){ // console.log('長按時間') // // timeStamp: 4798 進入頁面知道點擊所經歷的時間 // },
傳值按鈕
<button bindtap="clic" data-val="這是值" data-key="周四">傳值按鈕</button>
clic: function (e) { console.log(e.target.dataset) },
<view wx:if="{{condition}}"> True </view>
<view hidden="{{condition}}"> True </view>
頻繁切換 用 hidden
不常使用 用 wx:if
wxss樣式文件
WXSS(WeiXin Style Sheets)是一套樣式語言,用於描述 WXML 的組件樣式。
-
尺寸單位
-
樣式導入
注意: 在較小的屏幕上不可避免的會有一些毛刺,請在開發時盡量避免這種情況。
示例代碼:
/** common.wxss **/
.small-p {
padding:5px;
}
/** app.wxss **/
@import "common.wxss";
.middle-p {
padding:15px;
}
<view id="yy" class="oo">將老空間來記錄</view>
#yy{ width: 100rpx; height: 80rpx; background-color: red } .oo{ width: 100rpx; height: 800rpx; background-color: yellow }
- style:靜態的樣式統一寫到 class 中。style 接收動態的樣式,在運行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。
<view style="color:{{color}};" />
<view class="normal_view" />
定義在 app.wxss 中的樣式為全局樣式,作用於每一個頁面。在 page 的 wxss 文件中定義的樣式為局部樣式,只作用在對應的頁面,並會覆蓋 app.wxss 中相同的選擇器。
小程序提供了常用的標簽組件用於構建頁面
類似 div
代碼
<view hover-class="h-class"> 點擊我試試 </view> <!-- wxss --> .h-class{ background-color: yellow; }
顯示普通的文本 text只能嵌套text
<text selectable="{{false}}" decode="{{false}}"> 普 通 </text>
注意:該標簽 其實是 web中的 圖片標簽 和 背景圖片的結合!!! 並且不支持以前的web中的背景圖片的寫法!!!
mode 有效值
mode 有 13 種模式,其中 4 種是縮放模式,9 種是裁剪模式。
<video src="{{src}}" controls></video>
自定義組件 https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/
{
"component": true
}
<view>{{title}}{{name}}</view> <!-- 組件自定義變量寫在my-com.js中組件的屬性列表中 --> <view bindtap="click">自定義組件的點擊事件</view> <!-- 事件不能直接寫在。js里面 yao寫在js里面的method里面 -->
注意:在組件wxss中不應使用ID選擇器、屬性選擇器和標簽名選擇器
<!-- 這是自定義組件的內部WXML結構 --> <view class="inner"> {{innerText}} <slot></slot> </view>
/* 這里的樣式只應用於這個自定義組件 */ .inner { color: red; }
Component({ properties: { // 這里定義了innerText屬性,屬性值可以在組件使用時指定 innerText: { type: String, value: 'default value', } }, data: { // 這里是一些組件內部數據 someData: {} }, methods: { // 這里是一個自定義方法 customMethod: function(){} } })
{ // 引用聲明 "usingComponents": { // 要使用的組件的名稱 // 組件的路徑 "component-tag-name": "path/to/the/custom/component" } }
#頁面中wxml <my-con title="{{變量名}}"><my-con/>
#再組件中 properties: { title:{ type:String, value:"你好" } }
<view>{{title}}{{name}}</view> <!-- 組件自定義變量寫在my-com.js中組件的屬性列表中 --> <view bindtap="click">自定義組件的點擊事件</view> <!-- 事件不能直接寫在。js里面 yao寫在js里面的method里面 -->
<my-com title="555"></my-com>
踩的坑
<!-- 自定義組件中的變量隨時變換在導入的地方 直接寫title=變量 --> <my-com title="{{ll}}"></my-com> <!-- 在自定義組件中自定義一個變量 在引用的地方可以直接傳送過來 --> <!-- 如果自定義組件的變量注釋掉就不會顯示了在飲用的地方 -->
頁面 <my-com title="{{title}}" bind:icre="icre"></my-com>
頁面中js icre:function(e){ console.log(e) this.setData({ num:this.data.num+1 }) },
組件中的wxml
<button bindtap='clickpush'>加我</button>
組件中的js
clickpush:function(e){
console.log(e)
this.triggerEvent("icre",{"index":13},{})
}
示例二
組件頁面
<view bindtap="click">自定義組件的點擊事件</view> <!-- 事件不能直接寫在。js里面 yao寫在js里面的method里面 -->
組件。js文件
/** * 組件的方法列表 */ methods: { click:function(){ console.log('lljljl') this.triggerEvent("icre", {"a":123}, {}) // 自定義組件觸發事件時 需要使用這個方法 指定事件名 detail對象和時間選項 // ice是個事件 第二個是傳參數 } } })
使用組件的頁面中
<text>{{sum}}</text> <!-- sum初始值為零 --> <my-com title="{{ll}}" bind:icre="click"></my-com> <!-- 綁定事件是bind不要加tap -->
使用組件頁面的js文件中
click:function(e){ // console.log("****") console.log(e.detail.a) var _this = this var sum = this.data.sum _this.setData({ sum: sum+1 }) } // 沒接收e之前 可以點擊sum參數增加 // 自定義綁定組件傳值在拋出頁面那個方法第二個參數里傳值,獲取從e.datail中獲取注意是一個對象需要繼續點擊key
使用組件頁面的js文件中
data:{ ll:"隨時變話的自定義組件的值", sum:0 }