当前位置:   article > 正文

uni-app编译H5端、PC端、微信小程序、全局组件配置(不需要在components中定义)_uniapp 组件设置不同属性 在小程序和h5

uniapp 组件设置不同属性 在小程序和h5

uni-app编译H5端、PC端、微信小程序、全局组件配置(不需要在components中定义)

也不需要在页面中 像这样写一遍 对于H5可能没感觉 但小程序尤为繁琐

<loading ref="loading"/>

应用场景:全局自定义Loading加载状态、全局弹框等等

该方法不适合加载很复杂的逻辑以及组件详情,否则会造成页面卡顿以及小程序包体积增长;

H5\PC端

原理是通过找到HTML根标签body添加某个组件然后就不用在components中定义组件了

代码

  1. //定义loading组件
  2. <template>
  3. <view class="loading" v-show="loading" @touchmove.stop="false">
  4. <image class="img" src="../static/pageIcon/loading.gif" mode="widthFix"></image>
  5. </view>
  6. </template>
  7. <script>
  8. export default {
  9. name:"loading",
  10. data() {
  11. return {
  12. };
  13. },
  14. computed:{
  15. loading:function(){
  16. //记得在vuex中定义loadingFlag
  17. return this.$store.state.loadingFlag;
  18. }
  19. }
  20. }
  21. </script>
  22. <style lang="less" scoped>
  23. .loading{
  24. position: fixed;
  25. left: 0;
  26. right: 0;
  27. top: 0;
  28. bottom: 0;
  29. z-index: 10000;
  30. .img{
  31. width: 70px;
  32. position: absolute;
  33. left: 50%;
  34. top: 50%;
  35. transform: translate(-50%,-50%);
  36. }
  37. }
  38. </style>

接下来项目目录创建一个loading.js文件

  1. //导入组件
  2. import Loading from "../components/loading.vue"
  3. //定义模型
  4. const loadingModal={
  5. install:function(Vue){
  6. const Msg = Vue.extend(Loading)
  7. const msg = new Msg()
  8. document.body.innerHTML += "<div id='loading'><div id='loading'></div></div>"
  9. msg.$mount("#loading")
  10. }
  11. }
  12. //导出模型
  13. export default loadingModal

最后一步我们在main.js中导入该js文件

  1. //根据自己的文件位置导入
  2. import loadingModal from "./utils/loading.js";
  3. //挂载
  4. Vue.use(loadingModal);
  5. //全局使用mixin挂载两个方法用来控制loading的显示和隐藏
  6. Vue.mixin({
  7. methods: {
  8. showLoading(){
  9. store.commit('set_LoadingFlag', true);
  10. },
  11. hideLoading(){
  12. store.commit('set_LoadingFlag', false);
  13. },
  14. }
  15. });

使用

  1. //显示
  2. this.showLoading();
  3. //隐藏
  4. this.hideLoading();

微信小程序

小程序的因为根标签只有page标签页面更换page中的内容就会全部被换掉了
所以通过操作DOM元素插入组件这种方法无法实现,小程序可以通过webpack来实现原理是uni-app编译的时候通过微信小程序打开直接编译到每个页面

打开项目根目录输入cmd回车

 打开小黑板输入

npm install webpack@4.44.1

我这里使用的是4.44.1版本大家根据自己版本安装 如果已经安装可以忽略这一步

组件代码

  1. //loading组件
  2. <template>
  3. <view class="loading" v-show="loading" @touchmove.stop="false">
  4. <image class="img" src="../static/pageIcon/loading.gif" mode="widthFix"></image>
  5. </view>
  6. </template>
  7. <script>
  8. export default {
  9. name:"loading",
  10. data() {
  11. return {
  12. };
  13. },
  14. computed:{
  15. loading:function(){
  16. //别忘记在vuex中定义loadingFlag
  17. return this.$store.state.loadingFlag;
  18. }
  19. }
  20. }
  21. </script>
  22. <style lang="less" scoped>
  23. .loading{
  24. position: fixed;
  25. left: 0;
  26. right: 0;
  27. top: 0;
  28. bottom: 0;
  29. z-index: 10000;
  30. .img{
  31. width: 140rpx;
  32. position: absolute;
  33. left: 50%;
  34. top: 50%;
  35. transform: translate(-50%,-50%);
  36. }
  37. }
  38. </style>

在项目根目录创建vue.config.js

vue.config.js代码

  1. const fs = require('fs')
  2. const path = require('path')
  3. const webpack = require('webpack')
  4. module.exports = {
  5. chainWebpack: config => {
  6. config.module.rule('vue').use('vue-loader').loader('vue-loader').tap(options => {
  7. const compile = options.compiler.compile
  8. options.compiler.compile = (template, ...args) => {
  9. //注意这里使用正则匹配到项目pages文件夹下所有页添加该组件
  10. //如果大家有分包的情况下 而分包也需要加载该组件 记得修改正则
  11. if (args[0].resourcePath.match(/^(pages|epermarketSub)/)) {
  12. template = template.replace(/[\s\S]+?<[\d\D]+?>/, _ => `${_}
  13. <loading ref="loading"/>
  14. `)
  15. }
  16. return compile(template, ...args)
  17. }
  18. return options
  19. })
  20. }
  21. }

修改完之后 也可以在main.js中使用mixin混入两个全局方法用来控制loading的显示和隐藏

  1. //全局使用mixin挂载两个方法用来控制loading的显示和隐藏
  2. Vue.mixin({
  3. methods: {
  4. showLoading(){
  5. store.commit('set_LoadingFlag', true);
  6. },
  7. hideLoading(){
  8. store.commit('set_LoadingFlag', false);
  9. },
  10. }
  11. });

使用

  1. //显示
  2. this.showLoading();
  3. //隐藏
  4. this.hideLoading();

作者是小菜逼,对您有帮助麻烦点个关注,有什么不懂的欢迎私信!杠精勿扰

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/123915
推荐阅读