创建全局组件

先创建如下目录结构
image.png

1.在mian.vue中,创建组件模板

  1. <template>
  2. <div class="test-card">
  3. <!-- @:表示从根路径到src -->
  4. <img src="@/assets/logo.png" alt="图片">
  5. <img src="../../../assets/logo.png" alt="图片">
  6. <img :src="getSrc(src)" alt="图片">
  7. <!-- 普通插槽 -->
  8. <slot></slot>
  9. <!-- 具名插槽 -->
  10. <slot name="test"></slot>
  11. </div>
  12. </template>
  13. <script>
  14. export default {
  15. // 给组件一个名字
  16. name:'test-card',
  17. props:{
  18. src:{
  19. type:String,
  20. default:""
  21. }
  22. },
  23. data(){
  24. return {
  25. newSrc:''
  26. }
  27. },
  28. methods:{
  29. getSrc(src){
  30. // 这里要使用require去引入,否则'@/assets/'这个不会被解析,会议原来的字符串内容显示
  31. return require('@/assets/'+src);
  32. }
  33. }
  34. }
  35. </script>
  36. <style>
  37. </style>

2.index.js

通过index.js将组件模板注册,并导出

  1. import card from "./src/main.vue"
  2. // 给card添加一个新的install方法,将Vue作为参数传入
  3. // 通过这个方法执行Vue.component(card.name,card),将card注册为全局组件
  4. // Vue.component 参数1--组件名(在对应的main.vue中对应的name属性) 参数2--组件内容(组件本身)
  5. card.install = function(Vue) {
  6. Vue.component(card.name,card)
  7. }
  8. // 导出组件
  9. export default card;
  10. // 导出组件后再最外层的main.js文件中注册组件(全局组件),就可以使用了
  11. // 注册方式和注册第三方组件库一样,先引入组件,再通过Vue.use(引入组件名).就可以注册成功

3.注册全局组件

  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import store from './store'
  5. // 注册自定义全局组件
  6. // 注册方式和下面的组件库一样
  7. import card from './components/card/index';
  8. Vue.use(card)
  9. // 引入ui库
  10. import Antd from 'ant-design-vue';
  11. // 引入ui库的样式
  12. import 'ant-design-vue/dist/antd.css';
  13. Vue.config.productionTip = false
  14. // 将Antd注册成组件
  15. Vue.use(Antd)
  16. new Vue({
  17. router,
  18. store,
  19. render: h => h(App)
  20. }).$mount('#app')

4.使用

  1. <template>
  2. <div class="user-manage">
  3. <a-layout-content
  4. :style="{ margin: '24px 16px', padding: '24px', background: '#fff', minHeight: '280px' }"
  5. >
  6. <div>content</div>
  7. <!-- 使用自定义组件时要通过name的值来作为组件名 -->
  8. <test-card src= "logo.png">
  9. <!-- 使用普通插槽 -->
  10. <div class="slots100">普通插槽</div>
  11. <!-- 使用具名插槽 -->
  12. <!-- 必须使用 template #具名插槽名 的形式才可以-->
  13. <template #test>具名插槽</template>
  14. </test-card>
  15. </a-layout-content>
  16. </div>
  17. </template>
  18. <script>
  19. export default {
  20. }
  21. </script>
  22. <style>
  23. </style>