uniapp中全局页面挂载组件(小程序,h5)

这篇具有很好参考价值的文章主要介绍了uniapp中全局页面挂载组件(小程序,h5)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.uniapp 自带的 easycom

使用easycom的好处
1、简化组件的使用,提高开发效率

2、不论组件目录下安装了多少组件,easycom打包后会自动剔除没有使用的组件,对组件库的使用尤为友好。

说明

  • easycom方式引入的组件无需在页面内import,也不需要在components内声明,即可在任意页面使用

  • easycom方式引入组件不是全局引入,而是局部(按需)引入。例如在H5端只有加载相应页面才会加载使用的组件

  • 在组件名完全一致的情况下,easycom引入的优先级低于手动引入(区分连字符形式与驼峰形式)

  • 考虑到编译速度,直接在pages.json内修改easycom不会触发重新编译,需要改动页面内容触发。

  • easycom只处理vue组件,不处理小程序专用组件(如微信的wxml格式组件)。不处理后缀为.nvue的组件。但vue组件也可以全端运行,包括小程序和app-nvue。可以参考uni ui,使用vue后缀,同时兼容nvue页面。

  • nvue页面里引用.vue后缀的组件,会按照nvue方式使用原生渲染,其中不支持的css会被忽略掉。这种情况同样支持easycom

  • 示例
    "easycom": {
        "autoscan": true,
        "custom": {
          "^xxx-(.*)": "@/components/xxx-$1/index.vue" // 匹配components目录内xxx-**下的vue文件
        }
      },
    
  • 文件创建方法

uniapp中全局页面挂载组件(小程序,h5)

  • 上面的方法挂载后,每个页面需要单独写组件的标签,只是不需要引入
<template>
	<view >
            <xxx-zj></xxx-zj>
	</view>
</template>

2.使用vue-inset-loader(方法仅限于vue版本为2和在小程序中使用)

步骤:

1.首先需要把uniapp项目 初始化

npm init

2.下载vue-inset-loader

npm i vue-inset-loader

3.创建vue.config.js 文件

从HBuilder X创建的uniapp项目没有vue.config.js文件 所以需要建一个

const path = require('path')

module.exports = {
	configureWebpack: {
		module: {
			rules: [{
				test: /\.vue$/,
				use: {
				  // loader: "vue-inset-loader"
				  // // 针对Hbuilder工具创建的uni-app项目
				  loader: path.resolve(__dirname, "./node_modules/vue-inset-loader")
				},
			}]
		},
	}
}

4.创建组件
uniapp中全局页面挂载组件(小程序,h5)

5.全局引入组件引入到全局注册,可以在mian.js里面

// 全局自定义loading
import loading from '@/components/global/loading.vue';
Vue.component('loading', loading)

6.在pages.json文件中配置 insetLoader

"insetLoader": {
			//配置
			"config": {
				//将需要引入的组件名起了个loading的名字在下面label中使用
				//右侧"<loading ref='loading' />"为需要插入的组件标签
				"loading": "<loading ref='loadingView' />"
			},
			// 全局配置
			//需要挂在的组件名
			"label": ["loading"],
			//根元素的标签类型 也就是插入到页面哪个根元素下默认为div 但是uniapp中需要写为view
			"rootEle": "view"
	}

同时我们也可以在某个路由里面单独引入

"pages": [
		{
			"path": "pages/index/index", // 路由页面
			"aliasPath":"/",  //对于h5端你必须在首页加上aliasPath并设置为/
			"name": "index",
			"style": {
				"disableScroll": true // 设置为 true 则页面整体不能上下滚动(bounce
			}
			//单独配置,用法跟全局配置一致,优先级高于全局
			"label": ["confirm"],
			"rootEle": "view"
		},
    ]

6.然后我们在再封装公共的方式进行使用文章来源地址https://www.toymoban.com/news/detail-448679.html

// loading提示
	Vue.prototype.$loading=async function(obj){
		// #ifndef H5
		this.$refs.loadingView.show(obj)
		// #endif
		
	}
	Vue.prototype.$hideLoading=function(){
		if(this.$refs.loadingView){
			this.$refs.loadingView.close()
		}
	}

3.如果是在h5页面的话,我们需要使用vue自带的动态挂载组件,所以我们需要加一下判断

// vue 新增组件
	const  addH5component= function(url,name){
		return new Promise(async (r,_)=>{
			const idName = 'loading_new_custom_' + new Date().getTime() + '_' + parseInt(Math.random() * 1000)
			const customComponent = url.default
			const customComponentCom = Vue.component('confirmDialog', customComponent)// 创建组件
			const customComponentComNew = new customComponentCom()// 创建组件实例(可以传递参数 { propsData: props })
			const DOM = document.createElement('div')
			DOM.setAttribute('class', `confirmDialog_new_custom ${name}_component`)
			DOM.setAttribute('id', idName)
			document.body.appendChild(DOM)
			const comp = customComponentComNew.$mount(DOM.appendChild(document.createElement('template')))// 将虚拟dom节点改变成真实dom,获取组件的dom节点,并实现挂载
			comp.componentId=idName
			r(comp)
		})
		
	}
// loading提示
	Vue.prototype.$loading=async function(obj){
		// #ifdef H5
		if(!this.$refs.loadingView){
			this.$refs['loadingView']=await addH5component(require('@/components/global/loading.vue'),'loadingView')
		}
		this.$refs.loadingView.show(obj)
		// #endif
		// #ifndef H5
		this.$refs.loadingView.show(obj)
		// #endif
		
	}
	Vue.prototype.$hideLoading=function(){
		if(this.$refs.loadingView){
			this.$refs.loadingView.close()
			// #ifdef H5
			// 删除组件
			setTimeout(()=>{
				document.querySelectorAll('.loadingView_component').forEach(item=>{
					document.body.removeChild(item)
				})
				this.$refs.loadingView.$destroy()
			},0)
			// #endif
		}
	}

到了这里,关于uniapp中全局页面挂载组件(小程序,h5)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • H5(uniapp)跳转至小程序页面

    当前场景:需要在H5页面点击跳转至微信小程序页面 主要参考方法 :1、获取接口调用凭据 | 微信开放文档                          2、获取scheme码 | 微信开放文档 需要解决的主要问题 : 在对微信文档中的API接口进行调用的时候,不可避免的会出现跨域的问题,那么就需要

    2024年02月04日
    浏览(50)
  • uniapp H5页面、小程序页面获取手机号拨打电话

    效果图: 1、H5页面----手机号写死: 2、H5页面----动态获取手机号拨打: APP: 小程序: methods:

    2024年02月07日
    浏览(52)
  • uniapp小程序使用web-view承载的html页面是uniapp H5时,H5与小程序通讯

    最近在小程序项目用到web-view,需要web-view承载的H5和小程序通讯,碰到个大坑,所以写一下实现过程及怎么避坑。 一、小程序向web-view承载的H5传递参数,直接在url后接参数即可(xxxxx.com) 二、H5向小程序发送消息 在uniapp项目根目录创建 模板html 2、然后在模板html里引入微信

    2024年02月13日
    浏览(50)
  • UniApp转微信小程序之全局组件

    1.全局注册组件 两种方法推荐使用easycom 注册,easycom可以大规模注册组件 2.全局插入组件 1.下载插件 2.配置vue.config.js文件 没有这个文件的话,新建一个vue.config.js文件 3.注册全局组件 和uniapp中注册全局组件操作一样 4.配置pages.json文件

    2024年02月03日
    浏览(59)
  • uniapp微信小程序全局分享和自定义页面分享

    uniapp 实现微信小程序的全局 转发给好友/分享到朋友圈 的功能。主要使用 Vue.js 的 全局混入 概念。 1.在项目根目录创建mixins文件夹,然后创建全局分享的 js 文件。mixins/share.js  2.在项目的 main.js 文件中引入该 share.js 文件并使用 Vue.mixin() 方法将之全局混入: 3.自定义页

    2024年02月13日
    浏览(60)
  • uniapp实现将页面转换成pdf(小程序、app、h5)

    使用html2Canvas和jspdf 安装这两个 uniapp在小程序无法获取dom,app端可在renderjs中获取 dom,小程序需要使用web-view导入一个h5页面,实现转pdf H5和小程序 其中通过web-view导入到微信小程序的话,需要导入微信的sdk 在index.html中导入也不知道咋回事,有wx,但是wx.miniProgram是undefined 然

    2024年02月08日
    浏览(44)
  • uniapp 小程序 全局弹窗 每个需要使用的页面都不用再引用

    使用全局组件,先声明全局组件 与普通的组件声明不同之处在于 1:目录形式 2:声明引用方式 在components目录中创建组件目录/组件vue,如下 注意需要同名的目录 } show函数是组件的methods中的声明的函数 这种方式的可以在页面中直接调用组件的函数,不用再在页面中引用组件

    2024年02月03日
    浏览(46)
  • uniapp实现微信小程序内嵌h5页面的相互跳转

    前期准备3个页面,小程序内2个,h5一个。 小程序内:操作页pageA,展示容纳h5的展示页PageWebview.vue。 h5:h5页面pageB,并且有可以访问的线上url。 【微信小程序pageA-内嵌h5页面pageB】 1.1 pageA实现点击跳转,将pageB的访问地址url拼接,并进入展示页PageWebview.vue 1.2 PageWebview.vue页面用

    2024年02月12日
    浏览(65)
  • uniapp使用webview将页面转换成图片支持h5、app、小程序

    在uniapp项目中新建主页和webview页面 index.vue代码 webview代码 实现效果

    2024年02月05日
    浏览(53)
  • uniapp自定义组件在h5显示,微信小程序不显示?

    引入自定义组件不显示,先检查引入是否正确,还不行就下面: 清除一下微信小程序的缓存,全部清除,再重新编译一次应该就行了 还不行,或是偶尔再出现,hbuilder项目关闭重启一下

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包