小程式開發所遇的問題以及一些小細節

weixin_34194087發表於2017-11-24
2602441-53f72752b6fc5d08.png
image.png

1.基本知識

bindtap (冒泡)
catchtap (防止冒泡)
catchtouchmove
e.currentTarget.dataset.index(data- 裡面使用的定義)
import { apiV1 } from '../../utils/util';
e.detail.current(swiper裡面使用的屬性,e.detail / current)

2602441-0a6c82b77dbdda1e.png
image.png
2602441-3fa0f407c2c62273.png
image.png
2602441-583396ba62c081f0.png
image.png

根據官方文件的對應的元件,api,其有它的對應屬性可以使用,而e.detail/e.target/e.currentTarget/e.currentTarget.dataset是表示一個物件,後面跟著欄位

2. 點選圖示變化

2602441-e69b3bf81c125b2d.png
image.png

3.點選直接跳轉

2602441-2a8bd062262d816b.png
image.png

4. 相當js原生定義一個元素(這個是data-屬性)

2602441-d5ff9c823f9f9e21.png
image.png

5.檢視除錯資訊,初學者最好開啟容易看到debug

2602441-52ec9e8b19854d0b.png
image.png

6.哪個檔案放在這就哪個檔案是專案啟動時出現的首頁

2602441-d65d885090a8f867.png
image.png
2602441-1f0b699ffd4d5359.png
image.png

7.定義獲取全域性變數

2602441-b3d9fcf06cd6c9d6.png
image.png

8.SetData用法:

2602441-0cb9e5a324111566.png
image.png

9.跳轉頁面後設定的返回功能(點選後返回)

2602441-c7168132537605bd.png
image.png

10.需要裝nodejs才生效require

2602441-0da79f05ada01e17.png
image.png
11.放common公共模組盒,其他頁面可以require common.js/a.js裡面的函式事件或其他,common.js也可以require a.js
2602441-c0be90815b8eb569.png
image.png

可以在其他頁面中引用這commonjs檔案


2602441-9c3137a81bd62d54.png
image.png
2602441-4cfdb3a9931ffaa6.png
image.png
2602441-c9fdb005a6e11ba9.png
image.png

12.獲取後臺資料,在前端中渲染資料出來:

(其中api是指封裝好的獲取介面的寫法,URL_INDEX已定義是介面路徑)


2602441-11b5e64e3bfad3e3.png
image.png
2602441-4bf118e14ac3bc00.png
image.png
2602441-c8dd0ad5fde0588b.png
image.png

13.呼叫全域性方法

2602441-814e1d53ec916244.png
image.png

14.頁面生命週期

2602441-b501a1af419aaf39.png
image.png

15.佈局基礎(盒模型flex)

2602441-bba276e5150250eb.png
image.png

父級用了display:flex;子級也會用到,不影響
換行與不換行flex-wrap

2602441-8fa471f8471294c4.png
image.png

對齊方法justify-content


2602441-7418fcc3a3750d8f.png
image.png
2602441-326ec8684e071617.png
image.png

flex-grow(在空間剩餘前提下,可以設定擴充套件,來擴大某個元素的範圍)


2602441-e69854cf218c39d0.png
image.png

flex-shrink(在空間不足前提下,可以設定等比縮放)


2602441-16e78d447eb47320.png
image.png

16.全域性app.js

2602441-7fb501459611c96e.png
image.png

注意:


2602441-5c5b5e759ec7adbc.png
image.png
2602441-ccb2b80030c0e793.png
image.png
補充:

image元件不能像jq一樣用alt(載入前出現的圖片)
進度條元件設定不了橢圓樣式
載入小程式專案時出現的後臺獲取json資料獲取不出時,出現空白,不能解決

17.繫結資料判斷

2602441-3e8c96ec61083b5b.png
image.png

從orderList.js頁面裡的拼團中訂單跳轉到orderGroup.js中,它頁面的介面需要設定orderid為某條資料的具體值,才能顯示資料出來


2602441-19f96702f7c9c9fc.png
image.png
溫馨提示:

關於上拉載入資料,需要頁碼page/offset,設定在wx.request(相當公司的api中)的data中:
在js中的data設定一個pageNo初始值為1,然後在wx.request前面設定this.data.pageNo++,然後在wx.request的data中設定page:this.data.pageNo;然後設定this.setData({pageNo:this.data.pageNo})

注意一點:看公司的需求介面網站的接收引數和返回引數(接收引數一般是在wx.request中的data定義目的為了可以返回引數--有時需要做到這步才能獲取到資料)

關於規格那出現的小問題:
當wx:if在最外面,而它裡面也有一個wx:for,隱藏部分的應該全放在wx:for裡面

注意:一處不能同時定義兩個不能點選事件的動畫animation="{{}}"

18.onPullDownRefresh 下拉重新整理

onPullDownRefresh: function () {
// 下拉重新整理
wx.stopPullDownRefresh();
},

19.獲取使用者資訊wx.userInof

2602441-59663a42a456add5.png
image.png

20.wx.request中的data裡面傳值

2602441-4c9bf2efb0e5c808.png
image.png

21.介面資料為全域性,呼叫渲染後可以重用(全域性與區域性的區別)

Wxml


2602441-e1daa4a9206897ac.png
image.png

js:data


2602441-932006aa3fcddff3.png
image.png

事件/介面


2602441-e85bbbc0ac0aaff7.png
image.png

22.跳轉事件判斷(說明的就是這部分)

2602441-179149700fc8862e.png
image.png

23.微信支付介面和確認收貨

2602441-fc28ed77a20462ed.png
image.png
2602441-7626d7b3ae56dfec.png
image.png

24.上拉載入更多(上拉觸發)

https://coding.net/u/toBeMN/p/MINA-imitate-cnode-community/git(借鑑別人文章--有類似專案在這)

http://www.wxappclub.com/topic/384(借鑑別人文章)

Wxml 和js


2602441-5a232b8d1762bc10.png
image.png
2602441-cba213d739ddc6bc.png
image.png

專案的例子


2602441-06ece73c30b53ccf.png
image.png

wxml


2602441-9d6183b9d6d54d7a.png
image.png

js


2602441-7689d41595e64aff.png
image.png
2602441-c23b8dba94fd3915.png
image.png

25.動畫 淡入淡出和彈跳

2602441-3b056065a20db1ba.png
image.png
2602441-2978eae2c88a74b0.png
image.png
2602441-402b55baf609b72a.png
image.png

結合顯示隱藏來設定淡入


2602441-9004e3dcedb58ff4.png
image.png
補充:

一個step代表一組動畫,可以在一組動畫設定多個動畫

可以這樣表示


2602441-5b95d008647b28f3.png
image.png
2602441-c6bd2955957ebb2c.png
image.png

啟動彈起(相同的動畫,也需要在相對應的位置繫結不同的animation)


2602441-e36e336da766679a.png
image.png
2602441-85fc08e8b5bd285d.png
image.png
補充:
2602441-4867126e94e1cccc.png
image.png
2602441-5ae7b0407f4cab04.png
image.png

26.倒數計時

2602441-25cfb17815d958d4.png
image.png
2602441-3c4b951116763774.png
image.png
2602441-1437d8be7aed39f7.png
image.png

設定多個倒數計時,可能用不了陣列來設定,需要分開設定


2602441-cc24c7b8b0c09d80.png
image.png
2602441-f0ee1f16d4eb4577.png
image.png
2602441-975167cd2875432f.png
image.png
2602441-e319977255da2db9.png
image.png

27.遮罩背後不動,用到catchtouchstart事件

2602441-c2d189565f504257.png
image.png

阻止彈窗時背後不要動


2602441-ed4bda6c485fed18.png
image.png

wxml

2602441-c1e714852c9159f5.png
image.png

data


2602441-594996a4fce2d87c.png
image.png

函式事件


2602441-5666d800087f68a7.png
image.png

27.setInterval與clearInterval

2602441-4b714f4bf02fffb4.png
image.png

載入的圖示顯示


2602441-744528f98531ee52.png
image.png

scroll-view縱向滾動還有點選錨點
wxml

<scroll-view scroll-y="true" style="height: 200px;" bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" scroll-into-view="{{toView}}" scroll-top="{{scrollTop}}">
<view id="green" class="scroll-view-item bc_green" style="background:red;"></view>
<view id="red" class="scroll-view-item bc_red" style="background:yellow;"></view>
<view id="yellow" class="scroll-view-item bc_yellow" style="background:skyblue;"></view>
<view id="blue" class="scroll-view-item bc_blue" style="background:green;"></view>
</scroll-view>
<view class="btn-area">
<button size="mini" bindtap="tap">click me to scroll into view </button>
<button size="mini" bindtap="tapMove">click me to scroll</button>
</view>

js

var order = ['red', 'yellow', 'blue', 'green', 'red']
Page({
data: {
toView: 'green',
scrollTop: 100,
scrollLeft: 0
},
//滾動條滾到頂部的時候觸發
upper: function (e) {
console.log(e)
},
//滾動條滾到底部的時候觸發
lower: function (e) {
console.log(e)},
//滾動條滾動後觸發
scroll: function (e) {
console.log(e)},
//點選按鈕切換到下一個view
tap: function (e) {
for (var i = 0; i < order.length; ++i) {
if (order === this.data.toView) {
this.setData({
toView: order[i + 1]
})
break
}
}
},
//通過設定滾動條位置實現畫面滾動
tapMove: function (e) {
this.setData({
scrollTop: this.data.scrollTop + 10
})
}
})
var order = ['red', 'yellow', 'blue', 'green', 'red']
Page({
data: {
toView: 'green',
scrollTop: 100,
scrollLeft: 0
},
//滾動條滾到頂部的時候觸發
upper: function (e) {
console.log(e)
},
//滾動條滾到底部的時候觸發
lower: function (e) {
console.log(e)
},
//滾動條滾動後觸發
scroll: function (e) {
console.log(e)
},
//點選按鈕切換到下一個view
tap: function (e) {
for (var i = 0; i < order.length; ++i) {
if (order === this.data.toView) {
this.setData({
toView: order[i + 1]
})
break
}
}
},
//通過設定滾動條位置實現畫面滾動
tapMove: function (e) {
this.setData({
scrollTop: this.data.scrollTop + 10
})
}
})


2602441-9a7c9d6ca85e30f3.png
image.png

28.顯示人物頭像和名稱 彈窗提醒

wxml


2602441-616f46109a1fae56.png
image.png

js

var util = require('../../utils/util.js')
import { URL_SHOP_TIPS} from '../../utils/urls';
import { api } from '../../utils/util';
Page({
data: {
// logs: [],
orderDatas:[],
nickname:'',
headimg:'',
isShowTips:false
},
onLoad: function () {
// this.setData({
// logs: (wx.getStorageSync('logs') || []).map(function (log) {
// return util.formatTime(new Date(log))
// })
// })
this.showNoticTip();
},
showNoticTip:function(){
let that = this;
setTimeout(function () {
that.setData({
isShowTips: false
})
}, 5000)
let tempdata=this.data.orderDatas;
if(tempdata.length==0){
api(URL_SHOP_TIPS, { pagetype: 1 }, data => {
let tempdata = data.data;
if (tempdata) {
let n = Math.random();
let index = Math.floor(tempdata.length * n);
let orderdata = tempdata[index];
tempdata.splice(index, 1);
this.setData({
orderDatas: tempdata,
nickname: orderdata.nickname,
headimg: orderdata.headimg,
isShowTips: true
})
}
}, true, false)
}else{
let n = Math.random();
let index = Math.floor(tempdata.length * n);
let orderdata=tempdata[index];
//刪除當前顯示的資料
tempdata.splice(index,1);
this.setData({
orderDatas: tempdata,
nickname: orderdata.nickname,
headimg: orderdata.headimg,
isShowTips: true
})
}
setTimeout(function(){
that.showNoticTip();
},6000)
}
})

29.在wxfor設定的同一個結構佈局,可對應算出不同的時間戳

2602441-fd0ba43fe2322d52.png
image.png
2602441-3a6aabe30d07a8f6.png
image.png

wxml


2602441-e7936cf3b63f1c7b.png
image.png

js


2602441-3f41b981f51f3250.png
image.png

30.詳情頁跳轉url

(使用data-區別它們之間的跳轉標識)


2602441-d837e958ecf8ef10.png
image.png
補充說明:

只能分享給朋友,不能分享朋友圈;可以新增到手機桌面,只是相當快捷鍵

window相當於wx

2602441-08943f40f680261c.png
image.png

31.跳轉頁面設定

2602441-e3e41be2769591d0.png
image.png
2602441-1266145c4f19e65b.png
image.png

32.用setData強制改變資料

2602441-8ac545de1b2db020.png
image.png

33.專案的預覽按鈕只有註冊了appID才能預覽

2602441-163dd36a9f9d9a14.png
image.png

34.路徑設定

2602441-374a0400c7b49a70.png
image.png

視窗window、tabBar底部

(在pages這定義新建的資料夾,自動新建)
檔案內不能新增註釋行


2602441-9e7f07d410f1b0d1.png
image.png
注意
2602441-46873a8751d9ec51.png
image.png
2602441-c419c64fb7e94ad9.png
image.png

35.生命週期函式

2602441-54b0e1b62d828543.png
image.png
2602441-504a3a487c07e0d1.png
image.png
2602441-0a3551cd580dbbf3.png
image.png

36.頁面相關事件處理函式

(下拉重新整理,使用者轉發)


2602441-60921f564d0525e0.png
image.png

37.App.json定義的頭部標題和底部導航

2602441-70ebf1c11e635495.png
image.png

38.輪播

2602441-6d7c9c89a3624af7.png
image.png
2602441-0ae68801be44cd48.png
image.png
2602441-73e8782894af2652.png
image.png

39.載入loading

2602441-82d6ac03feb2ace1.png
image.png
2602441-e5656e905a2d19ef.png
image.png

40.scroll-view/scroll-x(滾動條橫縱向滑動)

注意:

使用豎向滾動scroll-y需要設定高度height

2602441-ff04c83dc3159da4.png
image.png
2602441-0a6cf059ac4ed453.png
image.png
2602441-82f68cd20383c345.png
image.png

41.資料請求wx.request(相當ajax)

2602441-13b7a49d0062193c.png
image.png

42.說明:this.setData相當return

movable-view/movable-area

2602441-4a4b86782f1593d2.png
image.png
2602441-25f56256baf57d8b.png
image.png
2602441-734adec8b6b4a315.png
image.png
注意:

movable-view必須在<movable-area/>元件中,並且必須是直接子節點,否則不能移動。

43.轉發

2602441-9fee7f3d03ec8e1f.png
image.png
2602441-61e490f4873418e8.png
image.png

44.點選事件

2602441-b563c9937ed3aee7.png
image.png

45.icon小圖示

2602441-6618bd2eb2ffa4b6.png
image.png
2602441-a7d81f01645ec909.png
image.png
2602441-c83bbc09d37d6c7c.png
image.png

46.text文字(動態增加刪除元素)

2602441-c4b3119a44f942f3.png
image.png
2602441-62f00e707cceac73.png
image.png
2602441-173b5cec17fcc9e6.png
image.png

47.progress進度條

2602441-eb7fe6d28249cd16.png
image.png
2602441-19389c9b82bdd2cb.png
image.png

48.button按鈕

2602441-ace7d38ff6c7d89a.png
image.png
2602441-70db8dc16f4c81fd.png
image.png
2602441-d9b2d0ede1f05512.png
image.png
2602441-f2b54067002bb7e7.png
image.png
2602441-1cc79ed0e1658df4.png
image.png

49.checkbox多選按鈕

2602441-293c309a63e46082.png
image.png
2602441-9e1dd8fffd8e684e.png
image.png
2602441-0697e48df0bbb6b9.png
image.png

50.from表單

2602441-0319bd55596d18e9.png
image.png
2602441-e5318d78f3767dbf.png
image.png
2602441-73f752108d99b211.png
image.png

51.input輸入框

(有一處用到相當vue中的v-model雙向資料繫結)


2602441-8e8d39d2924e1921.png
image.png
2602441-a5efe8ecea2e83ae.png
image.png
2602441-b0c7dd0373242b38.png
image.png
2602441-6af0f4f1ef5165f5.png
image.png
2602441-e346701db7a2cd22.png
image.png
2602441-0e56207f1bca5393.png
image.png
2602441-783656f61d62521d.png
image.png

52.label標籤

2602441-c9090d5fb0165b5d.png
image.png
2602441-2b1cf19b0e010308.png
image.png
2602441-ca507e66b17d12c4.png
image.png
2602441-98fc7a23e5c4a8fe.png
image.png
2602441-44898787df17b15e.png
image.png
2602441-f9792eb256062bf6.png
image.png

53.客服

(客服設定的賬號,是在微信小程式平臺註冊後登入設定就好)


2602441-2e90c19c683e752f.png
image.png
2602441-422b2697f64ede45.png
image.png

官方文件這部分資料目的是說明當使用者傳送訊息自動生成的json資料


2602441-1b2ba3ce17dd8b05.png
image.png

54.事件

2602441-84b92ef3086631df.png
image.png

55.時間戳(時間相差值,幾時幾分幾秒)

2602441-433c010acdc73cc2.png
image.png
2602441-b7669fffee945830.png
image.png
2602441-1a4f46560487f6c5.png
image.png
2602441-1e16301c50cd2aef.png
image.png
補充:
2602441-5ddecd69152b6773.png
image.png

56.獲取後臺json資料的區別

(本人的理解:jq和小程式的區別)

JQ :

ajax獲取資料,用$.ajax,都在js中獲取到的資料,獲取到的資料在ajax中,用類別定義對應的元素獲取後臺的相對應json欄位

小程式:

wx.require獲取資料 當用到多個類似結構資料。可以用wx.for={{arry}},在data定義一個陣列,data:{ arry:{} },然後在後面的onload(也可以放在其他的全域性函式內)中用wx.require定義tempdata=data.product(這個product是後臺的json資料的名字,這可以改變),然後需要獲取欄位,就在this.setdata那改變arry:tempdata (跟jq不同是,在wxml中已經用 arry.物件 形式表示了,不需要在js中的wx.require中再用類別分明對應不同元素位置插入相對應的元素欄位)

57.commodity收藏(是否已收藏)

直接在頁面中判斷是否收藏,而改變它的圖片路徑


2602441-7cee2f8fbb1fe838.png
image.png
2602441-c175a93be9ceff7a.png
image.png

58.從本地快取中同步修改指定 key 對應的內容

2602441-b8ce929b7fb86b25.png
image.png
2602441-d30f44b854290de4.png
image.png

本文作者lilyping
越努力,越幸運
原文連結:https://www.jianshu.com/u/3908e601f4ec
微信公眾號:BestLilyPing
github:https://github.com/lilyping
Demos原始碼地址:https://github.com/lilyping

相關文章