微信小程序入門教程之三:腳本編程 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

微信小程序入門教程之三:腳本編程

發表時間:2021-1-5

發布人:葵宇科技

浏覽次數:58


今天,接着往下(xià)講,教大家為小程序加入 JavaScript 腳本,做出動(dòng)态效果,以及如(rú)何跟用戶互動(dòng)。學會了腳本,就能做出複雜的頁面了。

本篇的難度要大于前兩篇,如(rú)果覺得不好理解,可(kě)以先跟着例子(zǐ),動(dòng)手做一遍,然後再讀文(wén)字說明,可(kě)能就容易理解了。

一、數據綁定

前面的所有示例,小程序的頁面都是寫死的,也就是頁面内容不會變。但是,頁面數據其實可(kě)以通(tōng)過腳本傳入,通(tōng)過腳本改變頁面,實現動(dòng)态效果。

小程序提供了一種特别的方法,讓頁面可(kě)以更方便地使用腳本數據,叫做"數據綁定"(data binding)。

所謂"數據綁定",指的是腳本裡面的某些數據,會自動(dòng)成為頁面可(kě)以讀取的全局變量,兩者會同步變動(dòng)。也就是說,腳本裡面修改這個(gè)變量的值,頁面會随之變化;反過來,頁面上修改了這段内容,對應的腳本變量也會随之變化。這也叫做 MVVM 模式。

下(xià)面看一個(gè)例子(zǐ)。打開home.js文(wén)件,改成下(xià)面這樣。


Page({
  data: {
    name: '張三'
  }
});

上面代碼中(zhōng),Page()方法的配置對象有一個(gè)data屬性。這個(gè)屬性的值也是一個(gè)對象,有一個(gè)name屬性。數據綁定機制規定,data對象的所有屬性,自動(dòng)成為當前頁面可(kě)以讀取的全局變量。也就是說,home頁面可(kě)以自動(dòng)讀取name變量。

接着,修改home.wxml文(wén)件,加入name變量。


<view>
  <text class="title">hello {{name}}text>
view>

上面代碼中(zhōng),name變量寫在{{...}}裡面。這是小程序特有的語法,兩重大括号表示,内部不是文(wén)本,而是 JavaScript 代碼,它的執行結果會寫入頁面。因此,{{name}}表示讀取全局變量name的值,将這個(gè)值寫入網頁。

注意,變量名區分大小寫,name和(hé)Name是兩個(gè)不同的變量名。

開發者工具導入項目代碼,頁面渲染結果如(rú)下(xià)。

可(kě)以看到,name變量已經自動(dòng)替換成了變量值"張三"。

這個(gè)示例的完整代碼,可(kě)以查看代碼倉庫。

頁面和(hé)腳本對于變量name是數據綁定關(guān)系,無論哪一方改變了name的值,另一方也會自動(dòng)跟着改變。後面講解到事件時,會有雙方聯動(dòng)的例子(zǐ)。

二、全局數據

數據綁定隻對當前頁面有效,如(rú)果某些數據要在多個(gè)頁面共享,就需要寫到全局配置對象裡面。

打開app.js,改寫如(rú)下(xià)。


App({
  globalData: {
    now: (new Date()).toLocaleString()
  }
});

上面代碼中(zhōng),App()方法的參數配置對象有一個(gè)globalData屬性,這個(gè)屬性就是我們要在多個(gè)頁面之間分享的值。事實上,配置對象的任何一個(gè)屬性都可(kě)以共享,這裡起名為globalData隻是為了便于識别。

然後,打開home.js,改成下(xià)面的内容,在頁面腳本裡面獲取全局對象。


const app = getApp();

Page({
  data: {
    now: app.globalData.now
  }
});

上面代碼中(zhōng),getApp()函數是小程序原生提供的函數方法,用于從頁面獲取 App 實例對象。拿到實例對象以後,就能從它上面拿到全局配置對象的globalData屬性,從而把app.globalData.now賦值給頁面腳本的now屬性,進而通(tōng)過數據綁定機制,變成頁面的全局變量now

最後,修改一下(xià)頁面代碼home.wxml


<view>
  <text class="title">現在是 {{now}}text>
view>

開發者工具導入項目代碼,頁面渲染結果如(rú)下(xià)。

可(kě)以看到,頁面讀到了全局配置對象app.js裡面的數據。

這個(gè)示例的完整代碼,可(kě)以查看代碼倉庫。

三、事件

事件是小程序跟用戶互動(dòng)的主要手段。小程序通(tōng)過接收各種用戶事件,執行回調函數,做出反應。

小程序的常見事件有下(xià)面這些。

  • tap:觸摸後馬上離(lí)開。
  • longpress:觸摸後,超過 350ms 再離(lí)開。如(rú)果指定了該事件的回調函數并觸發了該事件,tap事件将不被觸發。
  • touchstart:觸摸開始。
  • touchmove:觸摸後移動(dòng)。
  • touchcancel:觸摸動(dòng)作被打斷,如(rú)來電提醒,彈窗等。
  • touchend:觸摸結束。

上面這些事件,在傳播上分成兩個(gè)階段:先是捕獲階段(由上層元素向下(xià)層元素傳播),然後是冒泡階段(由下(xià)層元素向上層元素傳播)。所以,同一個(gè)事件在同一個(gè)元素上面其實會觸發兩次:捕獲階段一次,冒泡階段一次。詳細的介紹,請參考我寫的事件模型解釋。

小程序允許頁面元素,通(tōng)過屬性指定各種事件的回調函數,并且還能夠指定是哪個(gè)階段觸發回調函數。具體方法是為事件屬性名加上不同的前綴。小程序提供四種前綴。

  • capture-bind:捕獲階段觸發。
  • capture-catch:捕獲階段觸發,并中(zhōng)斷事件,不再向下(xià)傳播,即中(zhōng)斷捕獲階段,并取消随後的冒泡階段。
  • bind:冒泡階段觸發。
  • catch:冒泡階段觸發,并取消事件進一步向上冒泡。

下(xià)面通(tōng)過一個(gè)例子(zǐ),來看如(rú)何為事件指定回調函數。打開home.wxml文(wén)件,改成下(xià)面的代碼。


<view>
  <text class="title">hello {{name}}text>
  <button bind:tap="buttonHandler">點擊button>
view>

上面代碼中(zhōng),我們為頁面加上了一個(gè)按鈕,并為這個(gè)按鈕指定了觸摸事件(tap)的回調函數buttonHandlerbind:前綴表示這個(gè)回調函數會在冒泡階段觸發(前綴裡面的冒号可(kě)以省略,即寫成bindtap也可(kě)以)。

回調函數必須在頁面腳本中(zhōng)定義。打開home.js文(wén)件,改成下(xià)面的代碼。


Page({
  data: {
    name: '張三'
  },
  buttonHandler(event) {
    this.setData({
      name: '李四'
    }),
  }
});

上面代碼中(zhōng),Page()方法的參數配置對象裡面,定義了buttonHandler(),這就是

相關(guān)案例查看更多