微信小程序總結

1:小程序遵循{{}}語法

???<view>hello?{{name}}</view>

2:循環便利

??<view wx:for=”{{}}”>{{item}}</view>

自帶item

3:點擊事件

Bindtap=”事件名稱”

4:在js中對事件進行監聽這里和vue不太一樣例如

<view bindtap = “jia”>+</view>


data:{

Counter:0

}


Jia(){

this.setData({

counter:this.data.counter+1

})

}


5:全局配置

全局配置比較多,常用的有

屬性類型必填描述

pagesString[]是頁面路徑列表

windowObject否全局的默認窗口表現

tabBarObject否底部tab欄的表現

Pages:頁面路徑列表

用于指定小程序有哪些頁面組成,每一項都對應一個頁面路徑信息

小程序中所有的頁面都是必須在pages中注冊

Winsow:全局的默認窗口

用于指定窗口如何展示

"window":?{

用于修改導航背景顏色,必須是16禁止

"navigationBarBackgroundColor":?"#ff5777",

修改導航字體顏色,只有black和white兩個顏色選擇

"navigationBarTextStyle":?"black",

標題

"navigationBarTitleText":?"小程序",

在ios中下拉露出的背景顏色,android是煤油用的

"backgroundColor":?"#eeeeee",

下拉是小點的狀態,中有dark和;light兩種選擇

"backgroundTextStyle":?"light",

下拉刷新,默認是false

????"enablePullDownRefresh":?false

??}


tabBar:底部tabBar欄的展示

??"tabBar":?{

??選中是圖標的顏色

?"selectedColor":"#ff5777",

????//list至少兩個,最多5個.代表分頁

"list":?[{

跳轉的路徑

??????"pagePath":?"pages/home/home",

?????下面的字

?"text":?"首頁",

未選中是圖標的路徑默認路徑

??????"iconPath":?"asside/tabbar/home.png",

?????選中時圖標的路徑??

"selectedIconPath":?"asside/tabbar/home_active.png"

????},

???{

??????"pagePath":?"pages/news/news",

??????"text":?"分類",

??????"iconPath":?"asside/tabbar/cart.png",

??????"selectedIconPath":?"asside/tabbar/cart_active.png"

????}

??]

??}


6:單個頁面配置

單個頁面配置不需要window,直接寫

?????{

??"usingComponents":?{},

??"navigationBarBackgroundColor":?"#000000",

??"navigationBarTitleText":?"首頁",

??"navigationBarTextStyle":?"white",

??"backgroundColor":?"#ff5777",

??"enablePullDownRefresh":?true

}

7:獲取用戶信息-保存全局變量

獲取微信用戶的基本信息方式

?????1:wx.getUserInfo ???即將廢棄的接口

?????2:button組件 ????將open-type改成getUesrInfo,并且綁定bindgetuserinfo事件去獲取

?????3:使用open-data組件展示用戶信息

8:可以在App.js中定義一些數據,在這里的數據是全局數據,他本身會產生一個實例對象

?????globalDat:{

??????Name:’codeywhy‘

Age:18

}

在其他頁面使用時只需要調用這個實例對象就行

Const app = getApp()//getApp()獲取App()產生的實例對象


const?app?=?getApp();

console.log(app.globDat.name);

10:text組件

Text組件與span組件差不多

Text長用屬性

屬性類型默認值必填說明

selecttablebooleanfalse否文本是否可選

spacestring?否顯示連續空格

decodeboolleanfalse否是否解碼


注意:在小程序中屬性默認值是false如果加上該屬性,那么·就是設置了該屬性,值為true

selecttable屬性決定文本內容是否可以讓用戶選中

space屬性有三個取值

值說明

ensp中文字符空格一般大小

emsp中文字符空格大小

nbsp根據字體設置空格大小

decode是否解碼


11:Button組件用于創建按鈕。默認塊極元素

常見屬性

屬性類型默認值必填說明

sizestringdefault否按鈕大小

typestringdefault否按鈕樣式

plainbooleanfalse否按鈕是否鏤空,背景顏色透明

disabledbooleanfalse否是否禁用

loadingbooleanfalse否名稱前是否帶loading圖標

form-typestring?否用于<form>組件,點擊會分別觸發<form>組件的submit/reset事件

oprn-typestring?否微信開放能力

hover-classstringButton-hover否指定按鈕按下去的樣式類,當hover-class=”none”時沒有點擊效果


<button?size='mini'?type='primary'>type屬性</button>

<button?size='mini'?type='default'>type屬性</button>

<button?size='mini'?type='warn'>type屬性</button>



12:view組件

view組件的基本使用

??1:view ?容器相當于div(塊級元素,獨占一行,通常用作容器組件)

屬性類型默認值必填說明

hover-classstringnone否按下去的樣式類,當hover-class=’none’時沒有點擊效果

Hover-stop-propagationbooleanfalse否指定是否組織本節點的祖先節點出現點擊狀態


Hover-start-timenumber50否按住多久出現點擊態,單位毫秒

Hover-stay-timenumber400否手指送松開后點擊狀態保留時間,單位毫秒


13:image組件

1:

1:image組件可以寫成單表錢,也可以寫成雙標簽

????2:image組件默認有自己的大小:320*240

3:image組件是一個行內塊元素(inline-block)

2:常用屬性

屬性類型默認值必填說明最低版本

srcstring?否圖片資源地址1.0.0

modestringscaleToFill否圖片裁剪、縮放的模式1.0.0

webpbooleanfalse否默認不解析 webP 格式,只支持網絡資源2.9.0

lazy-loadbooleanfalse否圖片懶加載,在即將進入一定范圍(上下三屏)時才開始加載1.5.0

show-menu-by-longpressbooleanfalse否開啟長按圖片顯示識別小程序碼菜單2.7.0

binderroreventhandle?否當錯誤發生時觸發,event.detail = {errMsg}1.0.0

bindloadeventhandle?否當圖片載入完畢時觸發,event.detail = {height, width}1.0.0



src:本地地址/遠程地址

補充:本地相冊,或拍照

?1:定義一個按鈕,監控點擊事件

???<button?bindtap='chooseimg'>選擇圖片</button>

2:在data定義一個變量用來保存選擇圖片的地址,對該事件進行處理

???data:?{

imgpath:''

??},

??chooseimg(){

wx.chooseImage({

??count:?0,

success:(res)=>{//這里必須用建通函數,否則this指向不正確

this.setData({

??imgpath:res.tempFilePaths[0]//進行地址復制

})

}

})

??}

3:wxml中定義一個image組件,src屬性給予賦值{{}}語法


14:input組件

屬性類型默認值必填說明

Valuestring??輸入框初始內容

typestringtext否鍵盤類型

Passwordbooleanfalse否是否時密碼類型

placeholderstring?是 輸入框為空時占位付

Confirm-typestringdone否設置鍵盤右下角按鈕文字,僅在type=”text”時生效


事件

Bindinputeventhandle是鍵盤輸入時觸發,處理函數可以直接return一個字符串,替換輸入框內容

bindfocus?是聚焦時觸發

Bindblur??失去焦點時觸發

bindconfirm??點擊完成按鈕時觸發


Type的合法值

Text文本輸入鍵盤

number數字輸入鍵盤

idcard身份證輸入鍵盤

Digit帶小數點的數字鍵盤


Confirn-type的合法值

Send發送

search搜索

next下一個

go前往

done完成


15:wxss

???1:行內樣式

<view ?style=’cold:red;font-size:30px’>哈哈</view>

2:業內樣式

在本身文件的css中設置

3:全局樣式

在app.js中設置樣式

4:如果有相同的樣式

優先級:行內樣式>頁面樣式>全局樣式


16:Mustache語法

???1:與vu基本一樣

???2:可以三目運算付

<view>{{age >= 18?’成年人:未成年人’}}</view>

?3:時間

?Js中

??data:{

noteTime:new Date().toLocaleString()

}

onLoad(){

setInterval(()=>{

This.setData({

nowTime:new Data().toLocaleString()})

})

,1000}


17:block標簽的意義

??1:<block/>并不是一個組件,他僅僅是一個包裝元素,不會在頁面中做任何渲染,只接受控制屬性(v-for/v-if)

??2:使用block有兩個好處

?????1:將需要進行遍歷或者判斷的內容進行包裹

??????2:將便利和判斷的屬性放在block標簽中,不影響普通屬性閱讀,提高代碼質量

18:ittem,index起名字

<view?wx:for="{{moves}}"?wx:for-item='move'?wx:for-index='i'>{{move}}??{{i}}</view>




20:wxs語法

??1:wxs與js差不多,不支持es6

??2:需要<wxs>標簽,其次需要module屬性,值無所謂

??<wxs?module="info">

??var?message?='hello?word';

??var?name?=?'許';

??function?sum(num1,num2){

????return?num1?+?num2

??}

??//?<!--?commonjs導出?-->

module.exports?=?{//利用commonjs方法將定義內容導出

??message:message,

??name:name,

??sum:sum

}

3:使用

?1:利用mustache語法,并且利用上面的值

??<view>{{info.message}}</view>

<view>{{info.name}}</view>

<view>{{info.sum(10,20)}}</view>


21:事件通過bind/cath這個屬性綁定在組件上的 ?例如bindtap/cath/tab,在1.5之后為了閱讀性可以在bind和cath上加一個冒號

22:常見事件類型

??1:某些組件會有自己特性的事件類型,具體看文檔

例如:input有bindinput/bindblur.bindfocus

???????Scroll-view有bindscrolltowpper/bindscrolltolower


類型觸發條件

touchstar手指觸摸動作開始

touchmove手指出觸摸后移動

touchcancel手指觸摸動作被打斷,例如來電,彈窗

touchend手指觸摸動作結束

tap手指觸摸后馬上離開

longpress手指觸摸后,超過350ms再離開,如果指定了事件回調函數并處罰這個事件,tap事件將不會觸發

longtap手指觸摸后,超過350ms再離開(推薦使用longpress)


23:事件對象介紹

當某個事件觸發時,會產生一個事件對象,并且這個對象會被傳入到回調函數中

屬性類型說明

typeString事件類型

timeStampInteger頁面打開到觸發事件所經過的的毫秒數

targetObject觸發事件的組件的一些屬性集合

currentTargetObject當前組件的一些屬性集合

detailObject額外信息

touchesArray觸摸事件,當前停留在屏幕中的觸摸點信息的數組

changedTouchesArray觸摸事件,當前變化的觸摸點信息的數組


24:參數傳遞

利用data-來進行參數傳遞,例如data-index =“{{index}}”

data-:固定名稱,index:自己自定義的名子,{{index}}傳遞的值

接受:

在ji文件中,e.targe.dataset就是要傳遞過去的值


25:事件冒泡和事件捕獲

???bind:一層層傳遞

???cath:組織事件進一步傳遞 ??

事件捕獲是由外向內,事件冒泡是由內向外

事件捕獲:語法:capture-bind:tap =“a”:必須用capture-,如果用bind

就會有捕獲,或者冒泡,這里如果用cath就不會capture-cath:tap=”a”,這里必須用:tap


26:組件的樣式細節

結論1:組件內的class樣式,只對組件wxml內的節點生效,對引用組件的page頁面不生效

結論2:組件內不能·使用id選擇器,屬性選擇器,標簽選擇器

結論三:外部使用class樣式,只針對外部wxml的class生效,對組件內不生效

結論四:外部使用id選擇器,屬性選則器不會對組件內產生影響

結論5:外部使用·標簽選擇器,會對組件內產生影響


整體結論:

組件內的class樣式和組件外的class樣式默認會有一個隔離效果

為了防止樣式錯亂,官方不推薦使用id,屬性,標簽選擇器


如何讓class可以相互影響

在組件Components對象中,可以傳入一個options屬性,其中options屬性中有一個stylelsolation(隔離)屬性。

stylelsolation有三個取值

??1 isolated表示啟用樣式隔離在自定義組件內,使用class指定的樣式不會相互影響(默認取值)

??2:applyy-shared表示wxss樣式將影響到自定義組件,但自定義組件Wxss種指定的樣式不會影響頁面

??3: ?shard表示頁面wxss樣式將會影響到自定義組件,自定義組件wxss樣式也會影響頁面和其他設置


27:組件之間傳遞數據和樣式

傳遞數據:外部傳遞給內部

???1:首先在組件內部設置一個組件<view>{{title}}</view>//這里title就是要傳遞的數據

???????2:組件內部js文件中,利用?properties屬性,它里面是保存的的要傳遞的數據,然后對要傳遞的數據進行定義

?????Properties:{

?title:{

???type:String//數據類型,

???value:‘’//默認數據類型,

????observer:function(newval,oldval){}//參數監聽,一個是新的數據,一個是老的數據

}

}


傳遞樣式:外部傳遞給內部樣式

???1:首先在內部組件內設置一個組件<view class = titleclass>{{title}}</view>//這里的titleclass就是要傳遞的樣式

???2:然后在組件內部js文件中,利用?externalClasses屬性,它需要的是一個數組externalClasses:[titleclass],這里保存的的就是那個傳遞的樣式

???3:在外部文件中xml文件中titleclass = red,然后在外部css文件中對red進行設置

<view class = titleclass>{{title}}</view>

externalClasses:[titleclass]

?

?

<my-canshuchuandi titleclass = red>

.red{

Color:red}

?

傳遞事件

組件內控制外部數據

???1:首先在組件內有一個事件,例如這里有一個button

???????<button bind:tap = click>+1</bitton>

??2:在js文件中,監聽這個點擊事件,注意在組件中事件寫在methonds中,利用this.triggerEvent(),發送出一個事件

??methods:?{

click(){

??this.triggerEvent('click',{},{})//click:發送的事件名,{}:傳遞的信息,{}:一些額外信息,這個一般為空

}

??}

3:在外部文件中,再接受這個發送過來的事件

???<my-event?bind:click="click"></my-event>//:click就是接受的那個事件

4:然后再外部js文件中進一步處理

Click(){

This.setData({

Count:this,data.count+1})}


25:組件化開發:獲取組件對象的方式(selectComponent

1:首先定義一個組件

2:在夫組件中引用,并且給該組件定義一個類,或者id一般為id

3:父組件定義一個按鈕

4:點擊該按鈕獲取到該組件,具體如下

案例,夫組件修改子組件內容

子組件:{{counter}}

子組件js:

????????????Data:{counter:1}

???????????methods:?{

?????increntment(n){

???????this.setData({

?????????counter:this.data.counter+n

???????})

?????}

??}

?

父組件:“my-select”><my-select>//子組件引用

???????????<button bind:tag = click>修改子組件<button>

父組件js:

?????Click(){

Const myselect = this.selectComponent(#myselect)

第一種方法//一般不用

counter:myselect.setData({

Counter:myselect.data.counter + 20

第二種方法:點用函數

Myselect.increntment(20)

})

}

?

26:組件插槽

1:單插槽

子組件:我是單插槽

??????????<slot></slot>//定義一個單插槽

夫組件引用

???????????<my-slot><button>帶年紀</button></my-slot>//此時的button會代替《slot》

2:多插槽:

????1:多插槽有多個《slot》得為每個slot弄以個name屬性

《slot name =slot1>》

????2:在子組件js文檔中 設置一個options屬性,里面?multipleSlots設置為true

???options:{

????multipleSlots:true

??}

???????3:父組件引用

?????????<my-slots>

<button?type="primary"?slot?=?"slot2">帶年紀</button>

<slider?value="50"?slot?=?"slot1"></slider>

<text?slot?=?"slot3">123456</text>

</my-slots>


27:子組件Component構造器

Component({

//1:讓使用者可以給組件傳入數據

????propertis:{

titles:{

type:String,

Value:’’

}

} ,

??????2:定義組件內部初始化數據

??????data:{

Counter:0

},

3:用于定義組件內部地函數

methonds:{

Foo(){}

}

?4:定義組件地配置選項

?Options:{

??multipleSlots:true,//多插槽

?stylelsolation :isolated/ applyy-shared/ shard//設置樣式隔離方式


},

5:外界給組件傳入額外地樣式

???externalClasses:[],

6:可以監聽properties/data的改變

???Observers:{

?????Counter:function(newval){//這里沒有oldval

}

},

7:組件監聽生命周期函數

??7.1監聽所在頁面的生命周期函數

??pagelifetimes:{

show(){}//監聽組件所在頁面顯示出來時,

hide(){}//監聽組件所在頁面隱藏起來,

resize(){}//監聽頁面所在尺寸改變

},

???7.2:監聽組件本身的生命周期

Lifetimes:{

created(){}//在組建被創建出來,

attached(){}//組件被添加到頁面,

ready(){}//組件被渲染

move(){}//組件被移動到另一個節點

detached(){}//組件被移除掉

})


28:網絡請求

???1:微信提供了專屬的Api接口用于網絡請求:wx:request(Object object)

屬性類型默認值必填說明

urlString?是開封這服務器接口地址

dataString/object/Array/Buffer?否請求參數

headerObject?否設置請求的header,header中不能設置Referer。content-type默認為application/json

methodstringGet否請求方式

dataTypestringjson否返回數據類型

responseTypestringtext否響應數據類型

successfunction?否接口電泳成功的回調函數

failfunction?否接口調用失敗回調函數

failcompletefunction?否接口調用結束回調函數(調用成功,失敗都會執行)


2:利用Promise進行網絡請求封裝

1:首先額外新建一個請求封裝的js文件例如這里network.js

???export default function request(options){

????return new Promise((resolve,reject)=>{

?????Wx.request({

??????????url:options.url,

method:options.method ||’get’,

data:options.data || {},

Success:function(res){

resolve(res)

},

fail:function(err){

Reject(err)}

})}) ?

}


2:需要使用是時候首先導入這個封裝的文件

???Import request from “../../.....”

Request({

Url:'http://152.136.185.210:7878/api/m5/recommend'


}).then(res=>{logres}).cath(err=>logerr)

29:小程序中的分享

1: 分享總共有兩種分享方式

???1:點擊右上的菜單按鈕,之后點擊轉發

???2:點擊某一個按鈕,直接轉發

2:當我們轉發某一個小程序時,通常小程序會顯示一些信息

通過onShareAppMessage


字段說明默認值?

title轉發標題當前小程序名稱?

path轉發路徑當前頁面path,必須以/開頭?

imageUrl自定義圖片路徑使用默認截圖1?


??onShareAppMessage:?function?(options)?{

???????return{

?????????title:'小許',

?????????path:'/pages/home/home.wxml',

?????????imageUrl:'https://img2.baidu.com/it/u=3593822977,2222569124&fm=26&fmt=auto&gp=0.jpg'

???????}

??},

<button?size="mini"?type="primary"?open-type="share">點擊分享</button>

30:小程序中跳轉

頁面跳轉有兩種方式:通過navigator組件和通過wx的api

navigator組件主要用于頁面跳轉

屬性類型默認值必填說明

targetstringself否在那個目標上發生跳轉,默認是當前小程序

urlstring?否當前小程序內的跳轉lianjie

Oprn-typestringnavigate否跳轉方式

deltanumber1否當open-type為‘navigateBack’時有效,表示回退的層數

1:注意,這里的url以“/”開頭,并且不跟后綴名.wxml

open-type 的合法值

說明最低版本

navigate對應?wx.navigateTowx.navigateToMiniProgram的功能?

redirect對應?wx.redirectTo的功能?

switchTab對應?wx.switchTab的功能?

reLaunch對應?wx.reLaunch的功能1.1.0

navigateBack對應?wx.navigateBack的功能1.1.0

exit退出小程序,target="miniProgram"時生效?

2:注意:redirect:關閉當前頁面,跳轉到應用內的的某個頁面,但不允許跳轉到tabbar頁面,并且不能返回

????????switchTab:跳轉到tabbar頁面,并且關閉其他所喲有非tabbar頁面

????????Relaunch:關閉所有的頁面,打開應用中某個頁面可以跳轉到tabbar

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容