Rumah > applet WeChat > Pembangunan program mini > Perbincangan ringkas tentang beberapa cara komunikasi merentas halaman antara program mini

Perbincangan ringkas tentang beberapa cara komunikasi merentas halaman antara program mini

青灯夜游
Lepaskan: 2021-09-14 10:15:26
ke hadapan
4114 orang telah melayarinya

Artikel ini akan berkongsi dengan anda beberapa kaedah biasa komunikasi merentas halaman antara program kecil Anda boleh merujuknya jika perlu.

Perbincangan ringkas tentang beberapa cara komunikasi merentas halaman antara program mini

Aplet terdiri daripada halaman jika terdapat timbunan penghalaan untuk [A,B], nilai yang dilalui oleh A->B secara semula jadi boleh diteruskan lapisan demi lapisan, tetapi <.> Menghantar data memerlukan kaedah tambahan tambahan Beberapa kaedah biasa dibincangkan di bawah. [Cadangan pembelajaran berkaitan: B->ATutorial pembangunan program mini]

1. localStorage onShow

Senario aplikasi: A->B/B-> ;A boleh digunakan

Kelebihan: operasi mudah, mudah difahami

Kelemahan: apabila memanggil storan, tetapan mungkin gagal dan selepas tetapan, ia adalah cache yang berterusan, yang boleh mencemarkan logik asal dan harus dipadamkan dalam masa

Contoh aplikasi:

// 以A->B示例

// A 页面
Page({
    onShow(){
        if(wx.getStorageSync(&#39;$datas&#39;)){
            console.log(wx.getStorageSync(&#39;$datas&#39;))  // 11111
        }
    },
})

// B 页面
Page({
    someActions(){
        wx.setStorageSync(&#39;$datas&#39;,&#39;11111&#39;)
    },
})
Salin selepas log masuk

2 globalData onShow

Senario aplikasi: A->B. /B->A boleh

Kelebihan: operasi mudah dan mudah difahami secara langsung mengendalikan objek globalData, kecekapan pelaksanaan yang lebih tinggi daripada storan

Kelemahan: selepas tetapan, ia boleh diakses semasa kitaran hayat program mini, yang mungkin mencemarkan logik asal, harus dipadamkan dalam masa

Contoh aplikasi:

// 以A->B示例

// A 页面
const app = getApp();
Page({
    onShow(){
        if(app.globalData.$datas){
            console.log(app.globalData.$datas)  // 11111
        }
    },
})

// B 页面
const app = getApp();
Page({
    someActions(){
        app.globalData.$datas = &#39;11111&#39;;
    },
})
Salin selepas log masuk

3. EventChannel<🎜 disediakan oleh program mini itu sendiri >Senario aplikasi: Terutamanya B->A

Kelebihan: Program mini disediakan secara asli dan boleh dimusnahkan pada bila-bila masa

Kelemahan: Hanya terhad kepada

dan memerlukan perpustakaan asas Versi tidak kurang daripada 2.7.3

navigateToContoh aplikasi:

// A页面
wx.navigateTo({
  url: &#39;B?id=1&#39;,
  events: {
    // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
    acceptDataFromOpenedPage: function(data) {
      console.log(data)
    },
    someEvent: function(data) {
      console.log(data)
    }
    ...
  },
  success: function(res) {
    // 通过eventChannel向被打开页面传送数据
    res.eventChannel.emit(&#39;acceptDataFromOpenerPage&#39;, { data: &#39;test&#39; })
  }
})


// B页面
Page({
  onLoad: function(option){
    console.log(option.query)
    const eventChannel = this.getOpenerEventChannel()
    eventChannel.emit(&#39;acceptDataFromOpenedPage&#39;, {data: &#39;test&#39;});
    eventChannel.emit(&#39;someEvent&#39;, {data: &#39;test&#39;});
    // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
    eventChannel.on(&#39;acceptDataFromOpenerPage&#39;, function(data) {
      console.log(data)
    })
  }
})
Salin selepas log masuk
4 🎜>

Senario aplikasi: A->B /B->A boleh digunakan

Kelebihan: Pelaksanaan tersuai, boleh dilanjutkan

Kelemahan: Panjangkan pembolehubah tersuai ke wx , eventName yang sama mungkin berulang kali terikat pada acara mendengar

EventBus: Rujuk artikel ini

Pelaksanaan EventBus

Contoh aplikasi:

5. Dapatkan contoh tindanan halaman getCurrentPages
// app.js
const EventBus = require(&#39;./utils/eventBus.js&#39;);
App({
    onLaunch(){
        // 将eventBus初始到wx上
        wx[&#39;$uhomesBus&#39;] = (function () {
            if (wx[&#39;$uhomesBus&#39;]) return wx[&#39;$uhomesBus&#39;];
            return new EventBus();
        })();
    }
})

// A页面
Page({
    someActions(){
        wx.$uhomesBus.$on(&#39;$datas&#39;,(data)=>{
            console.log(data); // 11111
        })
    },
})

// B页面
Page({
    emitActions(){
        wx.$uhomesBus.$emit(&#39;$datas&#39;, &#39;11111&#39;);
    },
})
Salin selepas log masuk

Senario aplikasi: Terutamanya B->A

Kelebihan: Program mini disediakan secara asli, dan logik pemprosesan pada asasnya dihidupkan halaman B

Kelemahan: Peraturan sepadan halaman padanan perlu ditambah, dan Terdapat sekurang-kurangnya dua halaman dalam tindanan penghalaan

Contoh aplikasi:

6. Proksi globalData
// A页面
Page({
    someActions(datas){
        console.log(datas); // 11111
    },
})


// B页面
Page({
    someActions(){
        const pages = getCurrentPages();
        if (pages.length < 2) return;
        
        // 如果页面层级较多,可用循环去匹配到A页面;
        // 此处仅做2个页面的示例
        const prevPage = pages[pages.length - 1];
        
        // 路由匹配到A
        if (prevPage.route === &#39;A&#39;) {
            prevPage.someActions(&#39;11111&#39;);
        }
    },
})
Salin selepas log masuk

Kaedah ini belum diuji lagi. Prinsipnya boleh dilaksanakan; dan pemberitahuan langganan Vue3;

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati:

Pengenalan kepada Pengaturcaraan

! !

Atas ialah kandungan terperinci Perbincangan ringkas tentang beberapa cara komunikasi merentas halaman antara program mini. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan