uniapp vue3模式下定义全局变量及方法

文章讲述了在微信小程序中如何在根目录的common.js中创建全局变量并通过main.js导入并在组件中使用的技巧,以及遇到问题后的一种解决方案:使用`appContext.config.globalProperties`。
该文章已生成可运行项目,

在正H5里常,微信小程序得到全局变量, 有知道的老铁请指教--已解决

1.在根目录建立common目录及common.js

// 防止处理多次点击
function noMultipleClicks(methods, info) {
	// methods是需要点击后需要执行的函数, info是点击需要传的参数
	let that = this;
	if(that.noClick==null){
		that.noClick=true //布尔值 真为允许点
	}
	 if (that.noClick==true) {
	 	
	 	// 第一次点击
	 	if (info && info !== '') {
	 		// info是执行函数需要传的参数
	 		methods(info);
	 	} else {
	 		methods();
	 	}
		that.noClick=false
		setTimeout(() => {
			that.noClick = true;
		}, 2000)
	 } 
 }
function aaaa(){
	console.log("in common.js aaaa do it")
}
const atem={aaaa,noMultipleClicks}
//导出
export default {
	atem
	//禁止多次点击
}

2.在main.js中引入common.js

import common from "@/common/common.js"

并设置

app.config.globalProperties.$abc=common.atem
app.config.globalProperties.abc1="test"

3.在组件或页面中使用

在script里可以

getApp().$abc.aaaa()

如果要在template里,用上面的不行,可以在SCRIPT里定义个变量

    const ttt=getApp().$abc.noMultipleClicks

然后在template里引用,

ttt.aaaa()

//ttt.noMultipleClicks()

以上2024.04月测试可以

发布后一小时....在微信小程序无法得到这个全局变量-->已解决,看4

4.在微信小程序里,第三步的方式无效,用下面的方法测试可用

		const tem1=getCurrentInstance().appContext.config.globalProperties.abc1
		const tem2=getCurrentInstance().appContext.config.globalProperties.$abc
		console.log(tem1)//可得到abc变量的值 
        //aaaa和noMultipleClicks是在外部js中定义的两个方法,测试在H5和微信小程序中均可拿到.
        tem2.aaaa()
		tem2.noMultipleClicks(go1)

5. 2024.0630App.vue/App.uvue | uni-app官网 在官方页面有介绍,

globalData在app.vue里定义

    export default {  
        globalData: {  
            text: 'text'  
        }
    }  
const app = getApp()
console.log(app.globalData)
app.doSomething() // 调用 App.vue methods 中的 doSomething 方法

js中操作globalData的方式如下:

 getApp().globalData.text = 'test' 

本文章已经生成可运行项目
uniapp 结合 Vue3 的项目中,有以下几种定义全局变量方法: ### 使用 `app.config.globalProperties` 可以通过 `app.config.globalProperties` 来挂载全局变量方法。示例代码如下: ```javascript import { createSSRApp } from &#39;vue&#39; import App from &#39;./App.vue&#39; export function createApp() { const app = createSSRApp(App) app.config.globalProperties.$testname = &#39;testtesta&#39; // 可以挂载方法 // app.config.globalProperties.$testf = testf() return { app } } ``` 在组件中使用时,可以通过 `getCurrentInstance` 来获取全局变量: ```vue <template> <view>{{ testname }}</view> </template> <script setup> import { getCurrentInstance } from &#39;vue&#39; const instance = getCurrentInstance() const testname = instance.appContext.config.globalProperties.$testname </script> ``` 这种方式适合挂载一些常用的工具方法或者变量,方便在各个组件中使用 [^4]。 ### 使用 `globalData` 在 `app.vue` 里定义 `globalData`,示例如下: ```javascript export default { globalData: { text: &#39;text&#39; }, methods: { doSomething() { console.log(&#39;do something&#39;) } } } ``` 在其他地方获取 `globalData`: ```javascript const app = getApp() console.log(app.globalData) app.doSomething() // 调用 App.vue methods 中的 doSomething 方法 ``` `globalData` 可以用来存储一些全局的状态信息,在不同页面之间共享数据 [^3]。 ### 结合业务场景定义全局变量uniapp 项目中,当涉及到切换底部 tabbar 时根据条件刷新页面的场景,可以定义一个全局变量来控制是否需要更新数据。例如,在 `app.vue` 中定义一个全局变量: ```javascript export default { globalData: { needRefresh: false } } ``` 在 tabbar 页面中,可以根据 `needRefresh` 的值来决定是否更新数据: ```vue <template> <!-- 页面内容 --> </template> <script setup> import { onShow } from &#39;@dcloudio/uni-app&#39; const app = getApp() onShow(() => { if (app.globalData.needRefresh) { // 更新数据的逻辑 app.globalData.needRefresh = false } }) </script> ``` 这种方式可以避免在 `onshow` 生命周期里每次都调用异步请求更新数据,提高性能 [^2]。 ### 注意事项 在 `Vue.prototype` 上挂载属性或方法时,建议加一个统一的前缀,如 `$url`、`global_url` 等,以便在读代码时更容易识别,同时要注意不要和页面的局部变量名称一致,避免出现冲突 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值