vue2.0自定义组件

2017-09-24  本文已影响0人  前端工程狮_jam

此文主要为了举例说明vue2.0怎么创建自定义组件,例子用了最简单的一个loading加于证明。

1、初始化

mkdir vue-component-demo
cd vue-component-demo
vue init webpack-simple global-component-demo
npm install

2、新建相关文件夹和文件

项目根目录src下新增components文件夹
components文件夹下新增loading组件文件夹
loading组件文件夹下新增index.js和Loading.vue
//注意index.js不是固定的,可以是其它名字,只是import loading文件夹内容的时候默认会去找index.js

3、编写loading组件相关内容

//Loading.vue内容
<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>
<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>
//index.js内容
import LoadingComponent from './Loading.vue'

const Loading = {
    install: function(Vue){
        Vue.component('Loading', LoadingComponent)
    }
}

export default Loading

4、引入全局组件

在入口文件main.js引入Loading,注意这里默认找的是index.js,可以命名其它然后指定引用。

import Loading from './components/loading'
Vue.use(Loading)

5、使用Loading

在你需要用的模板template地方里直接写,它是一个全局组件,具体是否出现隐藏,通过vuex或者局部data去控制。

<Loading></Loading>
上一篇 下一篇

猜你喜欢

热点阅读