uToast全局挂载方法

        本文提供了h5、小程序、apk/ios的伪全局挂载方法,可按需自取

一、h5挂载方法

1.globalCompMethods.js

const install = (Vue, vm) => {
  const addH5component = function (url, name) {
    return new Promise(async (r, _) => {
      const idName = 'globalComp_' + new Date().getTime() + '_' + parseInt(Math.random() * 1000)
      const customComponent = url.default
      const globalComp = Vue.component(name, customComponent) // 创建组件
      const globalCompNew = new globalComp() // 创建组件实例(可以传递参数 { propsData: props })
      const DOM = document.createElement('div')
      DOM.setAttribute('id', idName)
      document.body.appendChild(DOM)
      const comp = globalCompNew.$mount(DOM.appendChild(document.createElement('template'))) // 将虚拟dom节点改变成真实dom,获取组件的dom节点,并实现挂载
      comp.componentId = idName
      r(comp)
    })
  }
  Vue.prototype.$showToast = async obj => {
    // #ifdef H5
    if (!vm.$refs.uToast) {
        // 不同项目、版本u-toast位置不同
        vm.$refs.uToast = await addH5component(require('@/uview-ui/components/u-toast/u-toast.vue'), 'uToast')
    }
    // #endif
    vm.$refs.uToast.show(obj)
  }
}
export default {
    install,
  }

2.main.js

import Vue from 'vue'
import App from './App'
const app = new Vue({ store, ...App })

// 全局组件方法
import globalCompMethods from '@/common/system/globalCompMethods.js'
Vue.use(globalCompMethods, app)

app.$mount()

3.随便在哪调用

  mounted() {
    this.$showToast({ title: '挂载成功', type: 'success', duration: 100000 })
  },

二、小程序挂载方法

1.在终端初始化并安装插件

npm init
npm i vue-inset-loader

2.创建vue.config.js引入vue-inset-loader

const path = require('path')
 
module.exports = {
	configureWebpack: {
		module: {
			rules: [{
				test: /\.vue$/,
				use: {
					loader: path.resolve(__dirname, "./node_modules/vue-inset-loader")
				},
			}]
		},
	}
}

3.page.json中新增配置

        1.全局配置

"insetLoader":{
	"config":{
		"uToast":"<u-toast ref='uToast'/>"
	},
	"label":["uToast"],
	"rootEle":"view"
}

        2.单页配置

"pages": [
		{
			"path": "pages/index/index", // 路由页面
			"aliasPath":"/",  //对于h5端你必须在首页加上aliasPath并设置为/
			"name": "index",
			//单独配置,用法跟全局配置一致,优先级高于全局
			"label": ["uToast"],
			"rootEle": "view"
		},
    ]

4.创建globalCompMethods.js文件

const install = (Vue, vm) => {
  Vue.prototype.$showToast = async obj => {
    vm.$refs.uToast.show(obj)
  }
}
export default {
    install,
  }

5.main.js中

import Vue from 'vue'
import App from './App'
const app = new Vue({ store, ...App })

// 全局组件方法
import globalCompMethods from '@/common/system/globalCompMethods.js'
Vue.use(globalCompMethods, app)

app.$mount()

 6.随便在哪调用

  mounted() {
    this.$showToast({ title: '挂载成功', type: 'success', duration: 100000 })
  },

三、apk/ios挂载方法(伪全局)

        1.App.vue

globalData: {
	toast:Object,
},

        2.navbar组件

<template>
	<view>
		<u-toast ref="uToast" />
	</view>
</template>
<script>
	export default {
		mounted(){
			getApp().globalData.showToast = this.$refs.uToast.show
		}
	}
</script>

        3.在有navbar组件的页面使用

getApp().globalData.showToast({
	title: res.message,
	type: 'success',
})

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一款流行的前端开发框架,它提供了一些便捷的工具和API,方便开发人员进行前端开发。其中,全局挂载是Vue框架的一种重要的功能之一,它可以让我们在任何组件中都能够使用一些公共的方法或属性。 全局挂载方法的实现非常简单,只需要在Vue对象的原型上添加对应的方法即可。例如,我们可以在main.js文件中添加以下代码: ``` Vue.prototype.$myMethod = function() { console.log('这是一个全局方法'); }; ``` 上面的代码定义了一个名为$myMethod的方法,并将它添加到了Vue对象的原型上。这样,我们在任何组件中都可以通过this.$myMethod()来调用这个方法。 除了方法,我们还可以全局挂载一些属性。同样,只需要在Vue对象的原型上定义对应的属性即可。例如,我们可以在main.js文件中添加以下代码: ``` Vue.prototype.$myProperty = '这是一个全局属性'; ``` 上面的代码定义了一个名为$myProperty的属性,并将它添加到了Vue对象的原型上。这样,在任何组件中都可以通过this.$myProperty来访问这个属性。 需要注意的是,全局挂载方法和属性会影响整个应用程序,因此,我们要谨慎使用它们。如果过多地使用全局挂载方法和属性,可能会导致代码的可维护性降低。因此,我们应该在必要的时候才使用全局挂载方法和属性,保证代码的整体结构清晰、易于维护。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值