亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

微信小程序如何實現(xiàn)數(shù)據(jù)共享與方法共享詳解

 更新時間:2022年01月09日 15:53:19   作者:久宇詩  
這篇文章主要給大家介紹了關于微信小程序如何實現(xiàn)數(shù)據(jù)共享與方法共享的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

全局數(shù)據(jù)共享 Mobox

原生小程序開發(fā)中我們可以通過 mobx-miniprogram 配合 mobx-miniprogram-bindings 實現(xiàn)全局數(shù)據(jù)共享。二者為外部依賴,我們需要npm或yarn去安裝構建相關依賴,才能正常使用.

npm安裝及其注意事項

小程序對 npm 的支持與限制

在小程序中已經(jīng)支持使用 npm 安裝第三方包,從而來提高小程序的開發(fā)效率。

  • 但是小程序中使用npm 包有如下5個限制:
    • 只支持純 js 包,不支持自定義組件,不支持依賴于 Node.js 內(nèi)置庫的包
    • 必須有入口文件,即需要保證 package.json 中的 main 字段是指向一個正確的入口,如果 package.json 中沒有 main 字段,則以 npm 包根目錄下的 index.js 作為入口文件。
    • 測試、構建相關的依賴請放入 devDependencies 字段中避免被一起打包到小程序包中,這一點和小程序 npm 包的要求相同。
    • 不支持依賴 c++ 插件的包
    • 小程序環(huán)境比較特殊,一些全局變量(如 window 對象)和構造器(如 Function 構造器)是無法使用的。

npm 依賴包的安裝與使用

初始化小程序生成package.json

npm init -y

安裝 npm 包

在小程序 package.json 所在的目錄中執(zhí)行命令安裝 npm 包:

npm install pageName

此處要求參與構建 npm 的 package.json 需要在 project.config.js 定義的 miniprogramRoot 之內(nèi)。

構建 npm

點擊開發(fā)者工具中的菜單欄:工具 --> 構建 npm

勾選“使用 npm 模塊”選項:

構建完成后即可使用 npm 包。

js 中引入 npm 包:

const myPackage = require('packageName')
const packageOther = require('packageName/other')

使用 npm 包中的自定義組件:

{
"usingComponents": {
    "myPackage": "packageName",
    "package-other": "packageName/other"
}
}

Mobox

1. 全局數(shù)據(jù)共享

  • 共享數(shù)據(jù)是指多個進程都可以訪問的數(shù)據(jù),而全局變量是一個進程內(nèi)的多個單元可共享的數(shù)據(jù)。
  • 解決組件之間數(shù)據(jù)共享的問題。
  • 開發(fā)中常用的全局數(shù)據(jù)共享方案有:Vuex、Redux、MobX、hooks等。

2. 小程序中的全局數(shù)據(jù)共享方案

  • mobx-miniprogram: 用來創(chuàng)建 Store 實例對象
  • mobx-miniprogram-bindings: 用來把 Store 中的共享數(shù)據(jù)或方法,綁定到組件或頁面中使用

3. 使用mobx

安裝 MobX 相關的包

在項目中運行如下的命令,安裝 MobX 相關的包:

npm i -S mobx-miniprogram mobx-miniprogram-bindings

注意:MobX 相關的包安裝完畢之后,記得刪除 miniprogram_npm 目錄后,重新構建 npm。

2. 創(chuàng)建 MobX 的 Store 實例

```
import {observable ,action} from 'mobx-miniprogram'
export const store=observable({

        <!-- 1、數(shù)據(jù)部分 -->
        num1:1,
        num2:2,

        <!-- 2、計算屬性 -->
        get sum(){
            return this.num1+this.num2
        },

        <!-- 3、actions方法,用來修改store中的數(shù)據(jù) -->
        updateNum1:action(function(step){
            this.num1+=tep
        })
    })
```

將 Store 中的成員綁定到頁面中

import { createStoreBindings } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'

Page({

    data: {

    },
    onLoad: function (options) {
        this.storeBindings = createStoreBindings(this, {
        store,
        fields: ['num1', 'num2', 'sum'],
        actions: ['updateNum1']
        })
    },

    btnHandler1(e) {
    
        this.updateNum1(e.target.dataset.step)
    },

    onUnload: function () {
        this.storeBindings.detroyStoreBindings()
    }
})

將 Store 中的成員綁定到組件中

  • 通過storeBindingsBehavior實現(xiàn)自動綁定
  • store:指定要綁定的store
  • fields:置頂綁定的數(shù)據(jù)字段
    • 綁定字段方式一:numA:()=>store.num1
    • 綁定字段方式二:numA:(store)=>store.num1
    • 綁定字段方式三:numA:'num1'
  • actions:指定要綁定的方法
import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'
Component({
    behaviors: [storeBindingsBehavior],
    storeBindings: {
        // 數(shù)據(jù)源
        store,
        fields: {
            numA: 'num1',
            numB: 'num2',
            sum: 'sum'
        },
        actions: {
        updateNum2: 'updateNum2'
        }
    },
})

組件方法共享 behaviors

1. 什么是 behaviors

behaviors 是小程序中,用于實現(xiàn)組件間代碼共享的特性,類似于 Vue.js 中的 “mixins”。

2. behaviors 的工作方式

每個 behavior 可以包含一組屬性、數(shù)據(jù)、生命周期函數(shù)和方法。組件引用它時,它的屬性、數(shù)據(jù)和方法會被

合并到組件中。

每個組件可以引用多個 behavior,behavior 也可以引用其它 behavior。

3. 創(chuàng)建 behavior

調(diào)用 Behavior(Object object) 方法即可創(chuàng)建一個共享的 behavior 實例對象,供所有的組件使用:

/* 
    調(diào)用Behavior()方法,創(chuàng)建對象實例
    使用module.exports講behevior 實例對象共享出去
*/
module.exports = Behavior({
    // 屬性節(jié)點
    properties: {},
    // 私有數(shù)據(jù)節(jié)點
    data: {},
    // 事件處理函數(shù)和自定義方法節(jié)點
    methods: {}
})

4. 導入并使用 behavior

在組件中,使用 require() 方法導入需要的 behavior,掛載后即可訪問 behavior 中的數(shù)據(jù)或方法,示例代碼

// components/test5/test5.js
const myBehavior = require('../../behaviors/my-behavior')

Component({
  behaviors: [myBehavior],
  /**
   * 組件的屬性列表
   */
  properties: {
    count: Number
  },
})

5. behavior 中所有可用的節(jié)點

可用的節(jié)點類型是否必填描述
propertiesObject Map同組件的屬性
dataObject同組件的數(shù)據(jù)
methodsObject同自定義組件的方法
behaviorsString Array引入其它的 behavior
createdFunction生命周期函數(shù)
attachedFunction生命周期函數(shù)
readyFunction生命周期函數(shù)
movedFunction生命周期函數(shù)
detachedFunction生命周期函數(shù)

6. 同名字段的覆蓋和組合規(guī)則

組件和它引用的 behavior 中可以包含同名的字段,此時可以參考如下 3 種同名時的處理規(guī)則:

① 同名的數(shù)據(jù)字段 (data)

② 同名的屬性 (properties) 或方法 (methods)

③ 同名的生命周期函數(shù)

如果有同名的數(shù)據(jù)字段 (data):

  1. 若同名的數(shù)據(jù)字段都是對象類型,會進行對象合并;
  2. 其余情況會進行數(shù)據(jù)覆蓋,覆蓋規(guī)則為:組件 > 父 behavior > 子 behavior 、 靠后的 behavior > 靠前的 behavior。(優(yōu)先級高的覆蓋優(yōu)先級低的,最大的為優(yōu)先級最高)

如果有同名的屬性 (properties) 或方法 (methods):

  1. 若組件本身有這個屬性或方法,則組件的屬性或方法會覆蓋 behavior 中的同名屬性或方法;
  2. 若組件本身無這個屬性或方法,則在組件的 behaviors 字段中定義靠后的 behavior 的屬性或方法會覆蓋靠前的同名屬性或方法;
  3. 在 2 的基礎上,若存在嵌套引用 behavior 的情況,則規(guī)則為:父 behavior 覆蓋 子 behavior 中的同名屬性或方法。

生命周期函數(shù)不會相互覆蓋,而是在對應觸發(fā)時機被逐個調(diào)用:

  • 對于不同的生命周期函數(shù)之間,遵循組件生命周期函數(shù)的執(zhí)行順序;
  • 對于同種生命周期函數(shù),遵循如下規(guī)則:
    • behavior 優(yōu)先于組件執(zhí)行;
    • 子 behavior 優(yōu)先于 父 behavior 執(zhí)行;
    • 靠前的 behavior 優(yōu)先于 靠后的 behavior 執(zhí)行;
  • 如果同一個 behavior 被一個組件多次引用,它定義的生命周期函數(shù)只會被執(zhí)行一次。

總結

到此這篇關于微信小程序如何實現(xiàn)數(shù)據(jù)共享與方法共享的文章就介紹到這了,更多相關微信小程序數(shù)據(jù)共享與方法共享內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 自定義PC微信掃碼登錄樣式寫法

    自定義PC微信掃碼登錄樣式寫法

    這篇文章主要介紹了自定義PC微信掃碼登錄樣式的寫法以及做了代碼分析,需要的朋友學習下吧。
    2017-12-12
  • JS學習筆記之閉包小案例分析

    JS學習筆記之閉包小案例分析

    這篇文章主要介紹了JS學習筆記之閉包,結合具體案例形式分析了javascript實現(xiàn)與使用閉包的相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • Js中foreach()用法及使用的坑記錄

    Js中foreach()用法及使用的坑記錄

    這篇文章主要介紹了Js中foreach()用法及使用的坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • JavaScript之iterable_動力節(jié)點Java學院整理

    JavaScript之iterable_動力節(jié)點Java學院整理

    這篇文章主要介紹了JavaScript之iterable,遍歷Array可以采用下標循環(huán),遍歷Map和Set就無法使用下標。為了統(tǒng)一集合類型,ES6標準引入了新的iterable類型,Array、Map和Set都屬于iterable類型
    2017-06-06
  • 原生js實現(xiàn)焦點輪播圖效果

    原生js實現(xiàn)焦點輪播圖效果

    本文主要分享了原生js實現(xiàn)焦點輪播圖效果的示例代碼,并解析了實例中的注意點。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 微信JS接口大全

    微信JS接口大全

    這篇文章主要為大家分享了最全面詳細的微信JS接口大全,希望對大家有幫助,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 跟我學習javascript的定時器

    跟我學習javascript的定時器

    跟我學習javascript的定時器,告訴大家具體的使用方法,并向大家提出了一個消息要求,制作一個定時器,有沒有朋友感興趣,挑戰(zhàn)一下
    2015-11-11
  • JS+HTML5 Canvas實現(xiàn)簡單的寫字板功能示例

    JS+HTML5 Canvas實現(xiàn)簡單的寫字板功能示例

    這篇文章主要介紹了JS+HTML5 Canvas實現(xiàn)簡單的寫字板功能,結合實例形式分析了js結合HTML5 canvas特性的圖形繪制相關操作技巧,需要的朋友可以參考下
    2018-08-08
  • JS拉起或下載app的實現(xiàn)代碼

    JS拉起或下載app的實現(xiàn)代碼

    最近做項目遇到這樣的需求,通過手機網(wǎng)頁判斷是否安裝了自己公司app,如果安裝了則拉起app,沒有安裝則跳轉到下載頁。怎么實現(xiàn)呢?下面小編給大家分享js拉起或下載app的實現(xiàn)代碼,需要的朋友參考下
    2017-02-02
  • js捕獲鼠標右鍵菜單中的粘帖事件實現(xiàn)代碼

    js捕獲鼠標右鍵菜單中的粘帖事件實現(xiàn)代碼

    突發(fā)奇想比如點擊菜單中的粘帖后事件如何捕獲,如下圖所示,用的jQuery中的paste事件,如想獲得粘帖文本要使用setTimeout控制下時間,感興趣的朋友可以參考下
    2013-04-04

最新評論