Vue组件封装(以封装一个button组件为例)

1/在components文件内创建一个button文件,文件内创建一个index.vue文件,在index.vue文件内写的是原型(包含组件的名字,应用的最底层的HTML标签,分别根据什么条件显示什么功能),同时该文件导出的数据为一个对象。

 1 <template>
 2     <div :class="type == 'Default'?'btn default':type == 'primary'?'btn primary':type == 'danger'?'btn danger':'btn default'">
 3         <slot></slot>
 4     </div>
 5 </template>
 6 
 7 <script>
 8 export default {
 9     name:"alley-Button",
10     props:{
11         type:{
12             type:String,
13             default:"Default"
14         }
15     }
16 }
17 </script>
18 
19 
20 <style>
21     .btn{
22          width: 100px;
23          height: 40px;
24          color:#fff;
25          text-align: center;
26          line-height:40px;
27     }
28     .default{
29        
30         background: red;
31        
32     }
33 
34      .primary{
35       
36         background: yellow;
37     }
38 
39      .danger{
40      
41         background: #ccc;
42     }
43 </style>

2/在button文件下建立一个index.js文件,文件内对新构建组件的名字进行注册。

1 import Button from "./index.vue";
2 
3  Button.install = (Vue)=>{
4     Vue.component(Button.name,Button)
5 }
6 
7 export default Button;

3/ 与button文件同级建立一个index.js文件,对组件进行注册,同时也注册进install中,在导出时,不仅要引出全局的,而且单个的也要引出,便于局部或全局引用。

 
 1 import Button from "./button"
 2  3  4  const components = [
 5      Button
 6  ]
 7  8  9  //vue。use使用时,必须要有install方法。参数就是vue。
10  const install  = (Vue)=>{
11      for(var key in components){
12          Vue.component(components[key].name,components[key])
13      }
14  }
15 16 17  export default {
18      install,
19      Button
20  }

4/要在main.js中进行引用

1  import Vue from 'vue'
2  import App from './App.vue'
3  import AlleyUI from "./components"
4  Vue.config.productionTip = false
5  Vue.use(AlleyUI);
6 7  new Vue({
8    render: h => h(App),
9  }).$mount('#app')

5/到这里,组件便是封装完成了,在App.vue中可以进行使用了。

 
 1 <template>
 2    <div id="app">
 3      <alley-Button>按钮</alley-Button>
 4      <alley-Button type="primary">按钮</alley-Button>
 5      <alley-Button>按钮</alley-Button>
 6      <alley-Button>按钮</alley-Button>
 7    </div>
 8  </template>
 9 10  <script>
11 12  export default {
13    name: 'app',
14   
15  }
16  </script>
17 18  <style>
19 20  </style>

6/ 运行结果为

 

posted @ 2019-08-02 21:24  木子世界  阅读(27336)  评论(0编辑  收藏  举报