微信小程序 ,主包页面进入分包页面 ,主包的getApp里面的东西直接被清掉了,只剩几个生命周期函数

在App函数加载的时候放了几个方法和全局数据,但是只要我是第一次进入小程序,

在主包页面中调用getApp()获取到的是小程序的全局实例,而在分包页面中获取到的是分包的实例,因此在分包页面中无法直接访问主包中定义的全局数据和方法。

解决方案:

在分包页面中使用wx.require()方法加载主包中的js文件,从而获取到主包中定义的全局数据和方法。

// 分包页面中的代码
const app = getApp(); // 获取分包实例
const mainApp = wx.require('/app.js'); // 加载主包的app.js文件
const globalData = mainApp.globalData; // 获取主包中定义的全局数据
const method = mainApp.method; // 获取主包中定义的全局方法

Page({
  // 分包页面的逻辑代码
})

在主包的app.js中定义一个方法,用来将需要在分包中使用的数据和方法挂载到小程序实例上,然后在分包页面中直接调用挂载到小程序实例上的数据和方法。

// 主包app.js中的代码
App({
  onLaunch: function () {
    // 将需要在分包中使用的数据和方法挂载到小程序实例上
    this.globalData = {
      // 全局数据
    };
    this.method = function () {
      // 全局方法
    };
  }
})

// 分包页面中的代码
const app = getApp(); // 获取分包实例

Page({
  onLoad: function () {
    const globalData = app.globalData; // 获取全局数据
    const method = app.method; // 获取全局方法
  },
  // 分包页面的逻辑代码
})


通过以上两种方法,可以在分包页面中使用主包中定义的全局数据和方法。

根据您提供的信息,我猜测您正在开发一个微信小程序,并且在从主包页面进入分包页面时,发现主包中的getApp中的数据被清除了,只剩下一些生命周期函数。

首先,需要明确的是,在微信小程序中,主包和分包是有独立的作用域的,它们之间的全局数据不共享。在从主包页面进入分包页面时,会重新创建一个新的作用域,并加载分包的代码,这样原来保存在主包作用域中的全局数据就无法直接访问了。

为了解决这个问题,可以考虑将需要在主包和分包之间共享的数据存储在缓存中,这样就可以跨越作用域访问了。微信小程序提供了一些缓存API,如wx.setStorageSync、wx.getStorageSync等,可以用来存储和读取数据。您可以将需要共享的数据存储在缓存中,在分包页面中再次读取它们,以达到数据共享的目的。

例如,在主包中存储数据:


// app.js
App({
  globalData: {
    message: 'Hello World'
  },
  onLaunch: function() {
    wx.setStorageSync('message', this.globalData.message);
  }
})

在分包页面中读取数据:


// subpage.js
Page({
  onLoad: function() {
    var message = wx.getStorageSync('message');
    console.log(message); // 输出 "Hello World"
  }
})

通过将数据存储在缓存中,就可以在主包和分包之间共享数据了。

另外,您提到在进入分包页面时,只剩下一些生命周期函数,这可能是因为分包中只包含了一些必要的代码和资源,而其他代码和资源仍然存储在主包中,因此只有与这些必要代码相关的生命周期函数被保留。如果您需要在分包中使用其他代码和资源,可以在分包中使用require函数来加载它们。