微信小程序的全局弹窗以及全局实例

全局组件

微信小程序组件关系中,父组件使用子组件需要在父组件index.json中引入子组件,然后在父组件页面中使用,这种组件的对应状态是一对一的,一个组件对应一个页面。如果有一个全局弹窗(登录),那么每个页面引入一次组件会非常麻烦,这里就需要封装全局弹窗,在页面直接引入使用即可。

微信小程序提供全局组件,只需要在app.json中引入组件,该组件就会被注册为全局组件,父组件的json文件不需要引入组件即可使用。
在这里插入图片描述

  "usingComponents": {
    "whatStore": "/components/whatStore/index"
  },

usingComponents中注册的组件就是全局组件,在小程序的任意页面都可以引入并使用组件
在这里插入图片描述
直接将组件写入页面即可,组件的使用方法和普通组件一致。



App() 小程序初始化方法,必须调用且只调用一次

在这里插入图片描述

App()必须在app.js中调用,必须调用并且全局只能调用一次,在App()中有应用的的生命周期。全局函数可以写在App()中,通过getApp()获取App()上挂载的方法。
在这里插入图片描述

// 页面上使用
let app = getApp()
console.log(app.sayHi());  // 全局函数

在这里插入图片描述
可以在App()上挂载登录方法,当用户token过期或者未登录时,通过全局函数配合全局弹窗来发起登录,也可以只调用全局函数默认刷新token




getApp() 全局唯一App()实例

在这里插入图片描述

getApp()上定义的参数为全局参数,都可以在小程序任意页面直接使用,建议将参数添加到globalData上,globalData默认挂载到getApp()身上,在app.js文件内,默认给我们提供了一个globalData对象,该对象就是用来挂载数据或方法的,你也可以直接挂载到getApp(),这个没有特定要求。

案例一

// A页面
let app = getApp()
app.globalData.params = '全局参数'

// B页面
let app = getApp()
console.log(app.globalData.params )  // 全局参数

案例二
该案例中,直接在globalData创建数据,没有任何挂载,在getApp()中可以直接访问globalData数据
在这里插入图片描述
商品详情页调用getApp()
在这里插入图片描述
输出结果:
在这里插入图片描述




app.js 小程序初始化调用文件

小程序的生命周期一般都写在app.js里面,其实就是小程序初始化的时候,会进入app.js并调用app.js内的属性和方法,例如onLaunchonShow方法等,我们一般会把初始化的方法写到小程序的生命周期(onLaunch等)内部,但其实方法写到App()外也是可以自动调用的,并且调用的顺序比onLaunch更早,请看下面的例子:
在这里插入图片描述
并且,写在App()外的属性和方法也是全局只调用一次,有了这个概念后,我们可以利用这个特性做文章,比如:写一个方法UserInfo,在app.jsnew UserInfo(),将UserInfo内的方法挂载到wx实例上就可以做到全局方法调用。

// UserInfo.js
var point = null;
class UserInfo {
    constructor(e = {}){
        point = this;  
        
        // wx为小程序的全局的wx实例
        const container = wx;

        if(!container.toLogin){
        
            // 在小程序实例上挂载toLogin ()方法,在页面中可以直接wx.toLogin 调用该方法
            container.toLogin = this.toLogin
        }
    }
    toLogin(){
        console.log('用户登录方法');
    }
}
module.exports = UserInfo
// app.js
import UserInfo from './utils/UserInfo'

new UserInfo() //  小程序启动会自动调用app.js内的方法,该调用的顺序在App()方法之前

App({
  onLaunch() {
    // xxx...
  },
  globalData: {
    userInfo: null,
    testInfo:'测试数据'
  }
})

上面例子中,小程序初始化,app.jsnew UserInfoUserInfo类中将toLogin挂载到了wx,那么全局实例wx身上就有toLogin方法,我们可以在任何页面调用wx.toLogin,如下:
在这里插入图片描述
如果toLogin是一个用户登录方法,那么我们就可以在任何页面调用wx.toLogin来唤醒登录。

总结:其实就是可以在app.js中默认挂载一些东西,例如:在小程序启动的时候,直接全局挂载封装好的方法,这些方法可以全局调用



wx 小程序的全局挂载对象

小程序的页面跳转wx.navigateTo为什么可以全局使用,任何页面都能使用wx.navigateTo,其实wx就是微信小程序的全局属性,我们在任何页面都可以打印wx,并且这些wx.xxx的方法都挂载在wx身上
在这里插入图片描述

在这里插入图片描述
在刚才的案例中,我们将toLogin挂载到wx身上,也就可以使用wx.toLogin调用该方法。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
微信小程序中的全局变量是在App.js文件中设置的,通过globalData对象来存储全局变量的值。在这个对象中,可以定义和存储需要在整个小程序中使用的变量。例如,可以定义一个名为hasLogin的全局变量,并设置初始值为false,还可以定义一个名为openid的全局变量,并初始化为null。 全局变量的使用可以在小程序的任何页面中进行。通过在页面中引入App.js文件,并使用`getApp()`方法获取到App实例,就可以访问和使用全局变量了。例如,可以通过`getApp().globalData.hasLogin`来获取或修改全局变量的值。 除了使用微信小程序原生的方式设置和使用全局变量外,还可以使用其他框架或工具来实现全局状态管理,如uni-app可以使用Vuex来定义和管理全局变量。通过在Vuex中定义全局变量的状态,并在需要使用的页面中引入并使用对应的状态值,可以实现全局变量的共享和修改。 总结起来,微信小程序全局变量是通过在App.js文件中设置globalData对象来存储的,可以在整个小程序中共享和使用。具体的使用方式可以根据需求选择原生方式或使用框架提供的方法来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [微信小程序 全局变量](https://blog.csdn.net/JxufeCarol/article/details/117735950)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [wx小程序、uni-app全局变量](https://blog.csdn.net/hbiao68/article/details/102898031)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值