Vue组件局部注册、全局注册详解,以及什么时候使用局部注册组件?什么时候使用全局注册组件?
1、局部注册,每种注册方式的优缺点2、全局注册3、什么时候使用局部注册,什么时候使用全局注册?
首先先讲以下局部注册和全局注册组件的使用方法:
局部注册
方法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组件。
更多推荐
所有评论(0)