Vue全局自定义组件use的使用....

761 阅读3分钟
虽然vue用过也写过几个项目了,但还是没弄明白,为什么有些组件可以 use,有些而不用use呢,比如 vue-router, vuex ,而axios却不用 最近经过自己的研究原来 use实现原理是这样的,(个人看法,不对的话请多指教)

拿一个简单案例来说明使用方法 :大家熟知的 loading加载 动画 如下图


代码如下目录结构如图 

在components里面新建组件 Loading 然后是入口文件 index.js

// 首先引入自己写的Loding.vue组件,这里.vue可以省略
import Loading from './Loading.vue'
/* 
 关键一步就是 要 install一下,这里面的参数 就是Vue这个构造函数 然后按照全局组件的写法,
把它暴露出去 (当然这些名字可以自定义)
*/
const loadingcomponent = {
  install (Vue) {
    Vue.component('vloading',Loading)
  }
}
export default loadingcomponent
下面我们看下大家比较关心的,如何use使用呢? 在main.js引入

// 引入你的自定义组件 然后就可以use使用了
import loading from './components/Loading'
Vue.use(loading)
然后在你想使用组件的地方直接写组件就行了,注意这里组件的名字 要和 Loading里入口文件 index.js里的 install里定义的名字一样,上面我写的是 vloading,所以使用就如下


Loading.vue代码就是你要做loading的一些样式啊,结构啊什么的 代码如下:

// 这里是随便写的的,因为只是一个展示的
<template>
  <div class="loader">
    <div class="loader-inner ball-spin-fade-loader">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </div>
  </div>
</template>

<script>
    export default {
        name: "Loading"
    }
</script>

<style scoped>
  .loader{
    width:80px;
    height: 80px;
    margin:50px auto;
  }
  @keyframes ball-spin-fade-loader {
    50% {
      opacity: 0.3;
      -webkit-transform: scale(0.4);
      transform: scale(0.4); 
    }
    100% {
      opacity: 1;
      -webkit-transform: scale(1);
      transform: scale(1);
    } 
  }
  .ball-spin-fade-loader {
    position: relative; 
  }
  .ball-spin-fade-loader > div:nth-child(1) {
    top: 25px;
    left: 0;
    -webkit-animation: ball-spin-fade-loader 1s 0s infinite linear;
    animation: ball-spin-fade-loader 1s 0s infinite linear; 
  }
  .ball-spin-fade-loader > div:nth-child(2) {
    top: 17.04545px;
    left: 17.04545px;
    -webkit-animation: ball-spin-fade-loader 1s 0.12s infinite linear;
    animation: ball-spin-fade-loader 1s 0.12s infinite linear; 
  }
  .ball-spin-fade-loader > div:nth-child(3) {
    top: 0;
    left: 25px;
    -webkit-animation: ball-spin-fade-loader 1s 0.24s infinite linear;
    animation: ball-spin-fade-loader 1s 0.24s infinite linear;
  }
  .ball-spin-fade-loader > div:nth-child(4) {
    top: -17.04545px;
    left: 17.04545px;
    -webkit-animation: ball-spin-fade-loader 1s 0.36s infinite linear;
    animation: ball-spin-fade-loader 1s 0.36s infinite linear; 
  }
  .ball-spin-fade-loader > div:nth-child(5) {
    top: -25px;
    left: 0;
    -webkit-animation: ball-spin-fade-loader 1s 0.48s infinite linear;
    animation: ball-spin-fade-loader 1s 0.48s infinite linear; 
  }
  .ball-spin-fade-loader > div:nth-child(6) {
    top: -17.04545px;
    left: -17.04545px;
    -webkit-animation: ball-spin-fade-loader 1s 0.6s infinite linear;
    animation: ball-spin-fade-loader 1s 0.6s infinite linear;
  }
  .ball-spin-fade-loader > div:nth-child(7) {
    top: 0;
    left: -25px;
    -webkit-animation: ball-spin-fade-loader 1s 0.72s infinite linear;
    animation: ball-spin-fade-loader 1s 0.72s infinite linear; 
  }
  .ball-spin-fade-loader > div:nth-child(8) {
    top: 17.04545px;
    left: -17.04545px;
    -webkit-animation: ball-spin-fade-loader 1s 0.84s infinite linear;
    animation: ball-spin-fade-loader 1s 0.84s infinite linear; 
  }
  .ball-spin-fade-loader > div {
    background-color: #399;
    width: 15px;
    height: 15px;
    border-radius: 100%;
    margin: 2px;
    -webkit-animation-fill-mode: both;
    animation-fill-mode: both;
    position: absolute; 
  }
</style>

就是这么简单,使用方法就是这样,我们也可以自己自定义我们的可以 use的全局组件了

(在下只是个切图仔,如有哪里说错请大神们指点,每天积累一点对自己有用的)