uniapp全局公共组件、样式及方法注册与使用详解
本文详解uniapp项目中全局公共组件、样式及方法的创建、注册与使用流程。涵盖基于Vue规范的组件编写、main.js全局注册及easycom自动注册机制;介绍SCSS变量与全局样式的引入方式;演示公共方法的封装与挂载至Vue原型,助力提升开发效率与代码复用性。
uniapp项目实践中全局公共组件、样式及方法的实际应用示例详解
前文已介绍新uniapp项目的创建流程,本文重点阐述全局公共组件、全局样式及全局方法的注册与调用方式。
目录结构
项目创建完成后,建议先进行目录初始化,此处展示个人常用的目录规范。
┌─components
├─hybrid
│ ├─html
│ │ └─error.html
│ └─q-icon
│ └─q-icon.vue
├─pages
│ └─index
│ └─index.vue
├─static
│ ├─fonts
│ │ └─iconfont.css
│ └─image
│ └─logo.png
├─scripts
│ └─http.js
│ └─index.js
│ └─urls.js
│ └─utils.js
├─styles
│ └─extend.scss
│ └─global.scss
│ └─mixin.scss
│ └─reset.scss
│ └─variable.scss
├─App.vue
├─favicon.ico
├─index.html
├─main.js
├─manifest.json
├─pages.json
├─uni.promisify.adaptor.js
└─uni.scss以下为官方推荐的目录结构标准。
┌─uniCloud 云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb(详见uniCloud)
│─components 符合vue组件规范的uni-app组件目录
│ └─comp-a.vue 可复用的a组件
├─utssdk 存放uts文件
├─pages 业务页面文件存放的目录
│ ├─index
│ │ └─index.vue index页面
│ └─list
│ └─list.vue list页面
├─static 存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─uni_modules 存放[uni_module](/uni_modules)。
├─platforms 存放各平台专用页面的目录,详见
├─nativeplugins App原生语言插件 详见
├─nativeResources App端原生资源目录
│ ├─android Android原生资源目录 详见
| └─ios iOS原生资源目录 详见
├─hybrid App端存放本地html文件的目录,详见
├─wxcomponents 存放小程序组件的目录,详见
├─unpackage 非工程代码,一般存放运行或发行的编译结果
├─AndroidManifest.xml Android原生应用清单文件 详见
├─Info.plist iOS原生应用配置文件 详见
├─main.js Vue初始化入口文件
├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期
├─manifest.json 配置应用名称、appid、logo、版本等打包信息,详见
├─pages.json 配置页面路由、导航条、选项卡等页面类信息,详见
└─uni.scss 这里是uni-app内置的常用样式变量公共组件
接下来演示公共组件的编写、注册及具体使用过程。
编写公共组件
uniapp项目基于vue框架开发,因此可利用vue的相关特性来构建公共组件。
在前述目录结构中,components文件夹用于存放所有全局公共组件。
以全局公共图标组件为例,建议采用{作者名称}-${组件名称}格式命名文件夹,并使用{作者名称}-${组件名称}.vue格式命名组件文件。
- 新建文件夹
q-icon; - 在
q-icon文件夹下创建q-icon.vue组件; - 开始编写组件的具体内容;
提示:关于图标资源,可访问iconfont网站挑选心仪图标加入购物车并加入个人项目,下载后将文件放入/static/fonts/iconfont.css目录中。
以下部分为模板代码,包含图标名称、大小及颜色的绑定逻辑。
<template>
<view class="q-icon">
<text
:class="{ demo: true, [`demo-${name}`]: true }"
:style="{ fontSize: size * 2 + 'rpx', color: color }"
>
</text>
</view>
</template>以下部分为脚本逻辑,包含父组件传递的消息参数、格式定义及默认值设置。
<script setup name="qIcon">
const props = defineProps({
// 名称
name: {
type: String,
default: "home",
},
// 大小
size: {
type: Number,
default: 16,
},
// 颜色
color: {
type: String,
default: "#333",
},
});
</script>以下部分为组件样式,可引入前述iconfont下载的文件。
<style scoped>
@import "/static/fonts/iconfont.css";
.q-icon {
padding: 10rpx;
}
</style>注册公共组件
- 将组件引入
main.js文件中进行注册;
在main.js文件中进行相应的引入操作。
import qIcon from "./components/q-icon/q-icon.vue";
app.component("q-icon", qIcon);- 利用
easycom机制进行注册;
"easycom": {
"autoscan": true,
"custom": {
"^q-(.*)": "@/components/q-$1/q-$1.vue"
}
}- 实现自动注册,无需手动注册即可直接使用,前提是组件位于
components文件夹内且符合官方规范;
使用公共组件
完成上述两步后,即可在页面中使用公共组件。
打开/pages/index/index.vue,在template中写入如下内容。
<q-icon name="user" :size="20" color="#333" />公共样式
编写公共样式旨在减少样式重复冗余,提升页面渲染效率及开发速度,下文介绍其编写、注册及使用步骤。
编写公共样式
在之前的目录styles中,已预先创建好若干样式文件。
此处以图标公共样式为例进行说明。
- 在
variable.scss中定义一个颜色变量$iconBgColor: #666;; - 在
global.scss中编写具体样式规则;
// 图标
.block-icon {
border: 2rpx solid $iconBgColor;
}注册公共样式
- 可在
main.js中引入之前编写的全局样式文件;
import "./styles/global.scss";- 也可在
App.vue中进行引入操作;
<style lang="scss">
/*每个页面公共css */
@import "./styles/global.scss";
</style>使用公共样式
例如:在/pages/index/index.vue中应用公共样式。
<view class="block-icon"> Uniapp </view>公共方法
以下是公共方法的编写、注册及使用流程。
编写公共方法
此处以简单的求和函数为例进行演示。
在scripts文件夹下的utils.js文件中编写该方法。
// 通用方法
// 求和方法
const sum = (a, b) => a + b;
const utils = {
sum,
};
export default utils;注册公共方法
- 将方法引入
/scripts/index.js;
// 公共方法
import utils from "./utils.js";
const apis = {
utils,
};
export default apis;- 将方法引入
main.js;
import apis from "./scripts/index.js";
// vue2
Vue.prototype.$apis = apis;
// vue3
app.config.globalProperties.$apis = apis;使用公共方法
在/pages/index/index.vue中调用该方法。
- 页面部分
<view class="text-sum">
<input
class="text-sum-ipt"
type="text"
v-model.number="sum.num1"
placeholder="请输入数字1"
/>
<text>+</text>
<input
class="text-sum-ipt"
type="text"
v-model.number="sum.num2"
placeholder="请输入数字2"
/>
<text>结果是:{{sum.result}}</text>
</view>
<button type="primary" @click="calcSum">求和</button>- 样式部分
.text-sum {
display: flex;
padding: 50rpx 0;
text-align: center;
.text-sum-ipt {
margin: 0 20rpx;
width: 100rpx;
border: 1rpx solid $iptBorColor;
}
}$iptBorColor是我在uni.scss中引入的一个变量:
/* 首页变量 */
$iptBorColor: #999;- 方法部分
export default {
data() {
return {
sum: {
num1: 0,
num2: 0,
result: 0,
},
};
},
methods: {
calcSum() {
this.sum.result = this.$apis.utils.sum(this.sum.num1, this.sum.num2);
},
},
};最后
查看最终成果展示。

以上即为全局注册公共组件、样式和方法的核心内容,更多关于uniapp全局公共组件样式的资料请关注本站其他相关文章!
前端大屏自适应方案:缩放与视口单位对比
2026-10-31 18:19:27
前端大文件分片下载实现:基于localForage与Vue的完整方案
2026-10-31 16:11:47
Vue3 中使用 VueUse 实现指定区域全屏阅读功能
2026-10-31 13:55:05
基于Vue与Pinia实现页面Loading动画及请求拦截处理
2026-10-31 13:54:42
Vue封装Echarts通用组件:Vue2/Vue3 JS/TS三种模板及常用配置事件详解
2026-10-31 11:38:03
