首先先讲以下局部注册和全局注册组件的使用方法:

局部注册

方法1、单独声明组件,用js对象注册组件

let componentA = {
  template: "<span>我是局部注册组件A-1</span>",
};

调用:

  components: {
    "A-1": componentA
  }

页面上调用
 <A-1></A-1>

优点:需求调用的时候,直接调用即可,也能处理稍复杂的场景

缺点:只能在当前组件中使用,有局限性

方法2、直接在实例中components注册

 components: {
    "A-2": {
      template: "<span>我是局部注册组件A-2</span>",
    }
  }

优点:直接写入就行,不用导入,适用于简单的组件

缺点:复杂的组件写起来很不方便,可读行差。

方法3、前两种注册方式都有局限性,只能在当前组件中使用。可通过export default声明一个组件,哪里有需要的时候在哪里注册

新建文件A.vue

export default {
  name: "A",
  created() {
    console.log("局部注册组件A");
  },
};

需要用到这个组件时,注册即可

  components: {
    A: A
  }

优点:使用方便

缺点:简单的组件,比如定义一个标签,就没必要使用

方法4、系统局部注册(其实和方法3差不多)

推荐创建一个 components 目录,并将每个组件放置在其各自的文件中。

然后你需要在局部注册之前导入每个你想使用的组件。例如,在一个假设的 ComponentB.js 或 ComponentB.vue 文件中:

import ComponentA from './ComponentA'
import ComponentC from './ComponentC'

export default {
  components: {
    ComponentA,
    ComponentC
  },
  // ...
}

 现在 ComponentA 和 ComponentC 都可以在 ComponentB 的模板中使用了。

 全局注册

1、组件的注册必须在vue实例化前完成,即new Vue({})之前,否则没有效果,全局注册一个组件B  ,Vue.component("B", {})()  不推荐

<template>
  <div>
    <span>我是自定义组件B</span>
  </div>
</template>
<script>
import Vue from "vue";
export default Vue.component("B", {
  created() {
    console.log("全局注册组件B");
  },
});
</script>

使用时,要先引入,无需在components中注册,直接在页面上使用

import B from './components/B.vue'

 虽然是全局注册,但是没有加入到components中,相当于代码根本就没执行过,也就没有注册成功,但加入components中,这种实现方式其实是局部注册。

 components: {
    B
  }

 页面调用,可传入参数

 <B  :属性="属性值"></B>

2、系统模块中全局注册(推荐)

先把需要创建的组件写好,新建C.vue

<template>
  <div>
    <span style="color: red">我是自定义组件C</span>
  </div>
</template>
<script>
export default {
  name: "C",
  created() {
    console.log("全局注册组件C");
  },
};
</script>

新建registerComponents.js,将需要的组件(C组件)进行注册

import C from './definte-component/C.vue'
const registerComponents = (Vue) => {
    Vue.component('C', C);
  };
export default registerComponents;

在main.js 中vue实例化之前调用,这一步很关键,不调用,注册的方法不会执行

import registerComponents from './components/registerComponents';

registerComponents(Vue)

 页面上使用:可以传参

 <C></C>

如果只是单个组件,单个业务,局部注册即可,若组件在很多场景都用到过,建议使用全局注册,比如tab、list组件。

Logo

前往低代码交流专区

更多推荐