小程序模板網(wǎng)

微信小程序_將臃腫的單頁js文件拆開

發(fā)布時(shí)間:2018-04-20 11:29 所屬欄目:小程序開發(fā)教程

小程序中每一個(gè)頁面對(duì)應(yīng)一個(gè)Page()方法,我們需要把變量和組件的各種事件都寫在一個(gè)對(duì)象里,然后把對(duì)象作為這個(gè)參數(shù)傳遞給Page方法

如下定義

const object = {
 data: {
   nickName:'酷走天涯'
  },
 // 頁面加載完成調(diào)用這個(gè)方法
  onLoad: function (options) {
  },
  bindTopupEvent:function(event){
  },
 // 所有的綁定組件事件都要寫在這個(gè)地方,可能特別多
 ....

}

可能你要定義好多組件模塊,比如城市列表 訂單 支付 等 組件 我們需要重用的組件 我們當(dāng)然希望把組件的綁定事件抽離出來,如下

order.wxml
order.js
order.wxss

先看看如何在頁面中分別引用這幾個(gè)文件,假設(shè)有一個(gè)主頁index

index.wxss 引入 order.wxss

@import "../../templates/order.wxss";

index.wxml 引入 oder.wxml

  <import src='../../templates/order.wxss'/>

index.js 引入 order.js

var order = require('../../templates/order.js')

我們想要想下面這樣使用,將擴(kuò)展組件的綁定事件引入進(jìn)來

Page(extend(order,object))

接下來我們就擴(kuò)展一個(gè)extend方法 創(chuàng)建一個(gè)extend.js 文件 專門寫這個(gè)方法,我們?cè)谄渌撁鎗s文件中也可以使用

var extend = function(a) {
    ([].slice.call(arguments, 1) || []).forEach(function(b) {
        if (b) for (var c in b) a[c] = b[c]
    })
    return  a
};
module.exports=extend;

注意一下

  1. a 代表第extend(arg1,arg2,arg3) arg1
  2. 當(dāng)然最好的調(diào)用方式為 Page(extend({},order,object))
  3. [].slice.call(arguments, 1) 將arguments 分割成數(shù)組 注意arguments不是數(shù)組類型,而是對(duì)象類型

有人可能會(huì)有下面的因?yàn)樵趏rder.js 文件 訪問 index.js 文件中變量?

order.js 中有如下方法

function pay(){
  // 獲取用戶的姓名
  const nickName =   this.data.nickName
}

order.js 文件和 index.js 沒有任何關(guān)系 為什么能調(diào)用index.js 文件的object 對(duì)象的data變量?

雖然 this.data 在order.js 文件中是不存在的 但是這個(gè)語法是沒有錯(cuò)誤的javascript 允許調(diào)用不存在的對(duì)象或者方法! 程序執(zhí)行的時(shí)候,調(diào)用的this.data 指的是index.js 文件中的定義的object對(duì)象的data變量,因?yàn)镻age方法已經(jīng)將兩者結(jié)合在一起了

注意一點(diǎn)非常重要,如果調(diào)用的方法 不是包含在Object中(Page(Object)),必須在order.js引入進(jìn)來

比如

var request = require('../../config/method')
你需要在order.js文件中調(diào)用request.pay() 方法


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://22321a.com/wxmini/doc/course/23797.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢