1.全局组件的目录

2.loading/index.js

  1.  
  2. import LoadingComp from './Loaiding'
  3. const compName=LoadingComp.name //获取组件的名字 当做全局组件名字使用
  4.  
  5. const loading = {
  6.   //Vue.use()方法就会自动执行install
  7.  
  8.   install(Vue) { 
  9.     Vue.component(compName, LoadingComp)
  10.   }
  11.  
  12. }
  13. export default loading

3.loading/Loading.vue

  1. <template>
  2. <div>
  3. <h3>{{loadingMessage}}</h3>
  4. <h3>{{aa}}</h3>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name: "Loading",
  10. props: {
  11. aa: {
  12. type: String,
  13. }
  14. },
  15. data() {
  16. return {
  17. loadingMessage: "loading..."
  18. };
  19. },
  20. methods: {},
  21.  
  22. };
  23. </script>
  24. <style lang="scss" scoped>
  25. </style>

4.main.js全局注册

  1. import Loading from './components/globalComponents/loading/index'
  2. Vue.use(Loading)

5.使用

  1. <template>
  2. <div>
  3. <loading></loading> //无需注册 直接使用
  4. </div>
  5. </template>

批量导入多个自定义全局组件

index.js文件(上面globalComponents下面统一新建一个index.js文件)

  1. import loading from './loading'
  2. import mySelect from './myselect'
  3.  
  4. export default {
  5. loading,
  6. mySelect
  7. }
  1. //main.js 批量导入全局自定义组件
  2. import globalComponents from './components/globalComponents'
  3. for (let key in globalComponents) {
  4. Vue.use(globalComponents[key])
  5. }

自定义全局TarBar组件

  1. <!-- TabBar.vue-->
  2. <template>
  3. <div
  4. class="tab"
  5. v-if="defaultTarBar.textList.length!==0"
  6. :style="{width:defaultTarBar.textList.length*45+'px'}"
  7. >
  8. <span
  9. v-for="(item, index) in defaultTarBar.textList"
  10. :key="index"
  11. :class="[defaultTarBar.active===index?'active':'']"
  12. @click="tabClick(index,item)"
  13. >{{item}}</span>
  14. </div>
  15. </template>
  16. <script>
  17. export default {
  18. name: "TabBar",
  19. props: {
  20. tabBar: {
  21. type: Object,
  22. required: true
  23. }
  24. },
  25. data() {
  26. return {
  27. defaultTarBar: {
  28. textList: [],
  29. active: 0
  30. }
  31. };
  32. },
  33. methods: {
  34. initDefaultTarBar() {
  35. this.defaultTarBar={...this.defaultTarBar,...this.tabBar}
  36.  
  37. },
  38. tabClick(index, item) {
  39. // console.log(index, item);
  40. this.defaultTarBar.active = index;
  41. this.tabBar.active = index;
  42. }
  43. },
  44. created() {
  45. this.initDefaultTarBar();
  46. }
  47. };
  48. </script>
  49. <style lang="less" scoped>
  50. .tab {
  51. display: flex;
  52. flex-flow: nowrap row;
  53. justify-content: space-between;
  54. align-items: center;
  55. // width: 100px;
  56. background: #1f4b74;
  57. overflow: hidden;
  58. border-radius: 30px;
  59. cursor: pointer;
  60. text-align: center;
  61. position: absolute;
  62. right: 0;
  63. top: 0;
  64.  
  65. span {
  66. flex: 1; //平分
  67. color: #5addff;
  68. }
  69.  
  70. .active {
  71. background: #5addff;
  72. color: #070931;
  73. }
  74. }
  75. </style>
  1. //index.js
    import TabBar from './TabBar'
  2. const compName = TabBar.name //获取组件的名字 当做全局组件名字使用
  3. console.log("compName", compName)
  4. const tabBar = {
  5. //Vue.use()方法就会自动执行install
  6.  
  7. install(Vue) {
  8. Vue.component(compName, TabBar)
  9. }
  10.  
  11. }
  12. export default tabBar

使用tarbar.vue

自定义Swiper全局组件

  1. <!--1Swiper使用与两组不同的数据,点击切换不同的数据源 但是两组数据的展示效果是一样的。
    2.另外也是将一个很长的数据list[],切了segment段,分列一起滚动。
    3. 下载安装 vue-seamless-scroll 单文件引用
    -->
  2. <template>
  3. <div class="container" v-if="computedListData.length!==0">
  4. <div v-for="( segmentList,index) in computedListData" :key="index">
  5. <scroll
  6. :data="segmentList"
  7. :class-option="defaultSwiper.optionSetting"
  8. class="seamless-warp"
  9. >
  10. <ul class="item">
  11. <li class="li" v-for="item in segmentList" :key="item">{{item}}</li>
  12. </ul>
  13. </scroll>
  14. </div>
  15. </div>
  16. </template>
  17. <script>
  18. // import vueSeamless from "vue-seamless-scroll";
  19.  
  20. import serviceCompany from "@/data/cityCell2-1/serviceCompany"; //对接情况 单位
  21. import service from "@/data/cityCell2-1/service"; //对接情况 服务
  22.  
  23. let {
  24. totalCount: serviceCompanyTotalCount,
  25. list: serviceCompanyList
  26. } = serviceCompany.data;
  27. let { totalCount: serviceTotalCount, list: serviceList } = service.data;
  28.  
  29. import scroll from "vue-seamless-scroll"; //导入组件
  30.  
  31. export default {
  32. name: "Swiper",
  33. props: {
  34. swiper: {
  35. type: Object
  36. }
  37. },
  38. components: {
  39. scroll
  40. },
  41. data() {
  42. return {
  43. serviceCompanyList: serviceCompanyList, //公司(单位)列表 15
  44. serviceList: serviceList, //服务列表 40个
  45. defaultSwiper: {
  46. optionSetting: {
  47. step: 0.4, // 数值越大速度滚动越快
  48.  
  49. limitMoveNum: 7, // 开始无缝滚动的数据量 this.dataList.length
  50.  
  51. hoverStop: false, // 是否开启鼠标悬停stop
  52.  
  53. direction: 1, // 0向下 1向上 2向左 3向右
  54.  
  55. openWatch: true, // 开启数据实时监控刷新dom
  56.  
  57. singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
  58.  
  59. singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
  60.  
  61. waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
  62. },
  63. segment: 4,
  64. active: 0 //配合tarbar切换的
  65. }
  66. };
  67. },
  68. computed: {
  69. computedListData() {
  70. const obj = {
  71. 0: this._segmentArr(
  72. this.serviceCompanyList,
  73. this.defaultSwiper.segment
  74. ),
  75. 1: this._segmentArr(this.serviceList, this.defaultSwiper.segment)
  76. };
  77. return obj[this.defaultSwiper.active];
  78. }
  79. },
  80. methods: {
  81. initDefaultSwiper() {
  82. this.defaultSwiper = { ...this.defaultSwiper, ...this.swiper };
  83. }
  84. },
  85. created() {
  86. this.initDefaultSwiper();
  87. },
  88. watch: {
  89. "swiper.active": {
  90. handler(newVal) {
  91. this.defaultSwiper.active = newVal;
  92. }
  93. }
  94. }
  95. };
  96. </script>
  97. <style lang="less" scoped>
  98. .container {
  99. display: flex;
  100. flex-flow: nowrap row;
  101. justify-content: space-between;
  102. align-items: flex-start;
  103. padding: 0.9rem 0.2rem 0.3rem 0.2rem;
  104.  
  105. .seamless-warp {
  106. height: 87%;
  107. overflow: hidden;
  108. .item {
  109. text-align: left;
  110. .li {
  111. padding-left: 10px;
  112. font-size: 14px;
  113. margin-bottom: 0.2rem;
  114. overflow: hidden;
  115. white-space: nowrap;
  116. text-overflow: ellipsis;
  117. position: relative;
  118.  
  119. &:before {
  120. content: "";
  121. width: 4px;
  122. height: 4px;
  123. background: rgba(90, 221, 255, 0.3);
  124. position: absolute;
  125. top: 9px;
  126. left: 0;
  127. }
  128. }
  129. }
  130. }
  131. }
  132. </style>
  1. //index.js
    import Swiper from './Swiper'
  2. const compName = Swiper.name //获取组件的名字 当做全局组件名字使用
  3. const swiper = {
  4. //Vue.use()方法就会自动执行install
  5.  
  6. install(Vue) {
  7. Vue.component(compName, Swiper)
  8. }
  9.  
  10. }
  11. export default swiper

use

07vue 自定义全局组件 通用流程的更多相关文章

  1. vue2 自定义全局组件(Loading加载效果)

    vue2 自定义全局组件(Loading加载效果) github地址: https://github.com/ccyinghua/custom-global-component 一.构建项目 vue ...

  2. Vuejs自定义全局组件--loading

    不管是使用框架,还是不使用任何的框架,我们都不可避免的需要与“加载中……”打交道,刚刚学习了Vuejs自定义组件的写法,就现学现卖,介绍一下吧! 先看一下目录结构,一般情况下,每一个组件都新建一个新的 ...

  3. 8svg 自定义全局组件

    0.https://www.npmjs.com/package/vue2-svg-icon 直接使用vue2-svg-icon插件 .如果不使用,就使用下面用法 注意:用阿里图标时候,最好都选择#ff ...

  4. vue自定义全局组件(自定义插件)

    有时候我们在做开发的时候,就想自己写一个插件然后就可以使用自己的插件,那种成就感很强.博主最近研究element-ui和axios的时候,发现他们是自定义组件,但是唯一有一点不同的是,在用elemen ...

  5. vue 自定义全局组件

  6. 自定义vue全局组件use使用(解释vue.use()的原理)

    我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们就来讲解一下怎么样定义一个全局组件,并解释vue.use()的 ...

  7. 自定义vue全局组件use使用、vuex的使用

    自定义vue全局组件use使用(解释vue.use()的原理)我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们 ...

  8. Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合

    Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合 一丶FORM的介绍 1.生成页面可用的HTML标签 2.对用户提交的 ...

  9. Vue 使用use、prototype自定义自己的全局组件

    使用Vue.use()写一个自己的全局组件. 目录如下: 然后在Loading.vue里面定义自己的组件模板 <template> <div v-if="loadFlag& ...

随机推荐

  1. QComboBox设置下拉item大小

    1.首先给ComboBox设置view: ui->comboBox->setView(new QListView()); 注意:这一句需要放在在所在界面的构造函数里,否则不生效. 2.给c ...

  2. 027_go语言中的通道选择器

    代码演示 package main import "fmt" import "time" func main() { c1 := make(chan strin ...

  3. Python3,逻辑运算符

    优先级 ()>not>and>or 1.or 在python中,逻辑运算符or,x or y, 如果x为True则返回x,如果x为False返回y值.因为如果x为True那么or运算 ...

  4. Windows10 无法完全关闭Hyper-V导致VirtualBox 虚拟机无法启动

    win10本来已经安装使用了VirtualBox. 突然心血来潮决定试试系统自带的虚拟机Hyper-V.发现并没有想象中的好用.随后在启用或关闭 Windows功能中关闭了Hyper-V. 这时我发现 ...

  5. JavaScript按位运算符~

    1. JavaScript按位运算符 Bit operators work on 32 bits numbers. 2. JavaScript按位运算符~ 值得注意的是,在JavaScript中,~5 ...

  6. JavaScript小游戏实例:简单的键盘练习

    键盘是一种常用的输入设备,灵活熟练地使用键盘进行输入是计算机用户需掌握的一门基本功.下面我们编写一个简单的键盘练习游戏. 1.刺破气泡交互式小动画 在编写简单的键盘练习游戏之前,先设计一个简单地刺破气 ...

  7. 线程安全&Java内存模型

    目录 Java内存模型 关于线程安全 Volatile关键字 Synchronized锁 重入锁 Lock锁 死锁 乐观锁与悲观锁 乐观锁(适合多读场景) 悲观锁(适合多写场景) Java内存模型 J ...

  8. object detection 总结

    1.基础 自己对于YOLOV1,2,3都比较熟悉. RCNN也比较熟悉.这个是自己目前掌握的基础2.第一步 看一下2019年的井喷的anchor free的网络3.第二步 看一下以往,引用多的网路4. ...

  9. 08 vi全屏文本编辑器

    打开文件vim /path/to/somefilevim +# :打开文件,并定位于第#行(如下的 vi +33 profile) vim +:打开文件,定位至最后一行vim +/PATTERN : ...

  10. 面试官:怎么做JDK8的垃圾收集器的调优?

    面试官:怎么做JDK8的垃圾收集器的调优? 看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在JDK8中有Serial收 ...