Vue核心——组件Component

本文详细介绍了Vue.js中的组件(Component)概念,包括组件的创建和调用方式。在组件创建部分,讲解了JS内部声明注册和JS外部声明、内部注册的三种方法。在组件调用方面,探讨了kebab-case和PascalCase/CamelCase命名规则及其在实际调用中的应用。此外,还提到了在模块化系统开发中如何注册和调用组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一, 什么是组件

组件的本质:
组件的本质是一段HTML代码,这段HTML代码会被当做模板,以便重复使用。

二,组件的创建

使用:
        必须声明,并注册后,才能使用。(下例为全局组件为例)

注意:
        组件中的HTML模板代码必须有一个唯一的根标签。

1,JS内部声明注册

原始写法

  //声明组件
  var tem1 = Vue.extend({
       template: '<div><h1>标题</h1><h2>子标题</h2> <p>内容</p></div>',
    });
    
   //注册组件
   Vue.component('com1', tem1)

简化写法

   Vue.component('com1', Vue.extend({
       template: '<div><h1>标题</h1><h2>子标题</h2> <p>内容</p></div>',
    });

最简化写法

   Vue.component('com1', {
       template: '<div><h1>标题</h1><h2>子标题</h2> <p>内容</p></div>',
    });

2,JS外部声明,内部注册

模板

<template id="tmpl">
    <div>
	      <h1>标题</h1>
	      <h2>子标题</h2>
	      <p>内容</p>
    </div>
 </template>

结合原始写法

  //声明组件
  var tem1 = Vue.extend({
       template: '#tmpl',
    });
    
   //注册组件
   Vue.component('com1', tem1)

结合简化写法

   Vue.component('com1', Vue.extend({
       template: '#tmpl',
    });

结合最简化写法

   Vue.component('com1', {
       template: '#tmpl',
    });

三,组件的调用

1,kebab-case横线连接命名

直接用横线连接命名的组件,调用时直接用标签的方式调用
注册

   //注册名为kebab-cased-component
   Vue.component('kebab-cased-component', {
       template: '#tmpl',
    });

调用

<template>
    <div>
	    <p>当前组件内容</p>
	    <keba-cased-component></keba-cased-component><!--调用kebab-cased-component组件-->
    </div>
</template>

2,PascalCase和camelCase命名

单词首字母大写拼接命名的组件,调用时大写的首字母替换为 -小写字母(第一个单词除外),
并以标签的方式调用

示例

PascalCase:
	<!--如下都是PascalCase命名,由多个单词拼接,每个单词首字母大写-->
	UserInfo
	UserName
	
camelCase:
	<!--如下都是camelCase命名,由多个单词拼接,首个单词小写,后面其他单词首字母大写-->
	userInfo
	userName

注册

	<!--注册名为camelCase类型-->
   Vue.component('camelCaseComponent', {
       template: '#tmpl',
    });
    <!--注册名为PascalCase类型-->
   Vue.component('PascalCaseComponent', {
       template: '#tmpl',
    });

调用


<template>
    <div>
	    <p>当前组件内容</p>
	    <camel-case-component></camel-case-component><!--调用camelCaseComponent组件-->
	    <pascal-case-component></pascal-case-component><!--调用pascalCaseComponent组件-->
    </div>
</template>

四,基于模块化系统开发中组件的调用

模块化系统开发会用到webpack和ES6的Module章节的知识,可以参考下ES6的文档。

1,注册组件

MyButton.vue代码

<template>
	<div>
		<!--假设这是一个按钮-->
		<h1>Button</h1>
	</div>
</template>
<script>
	//将当前页面中template模板组件公开出去,名称为button-com
    export default {
        name: "button-com",
    }
</script>

2,调用组件

Login.vue代码如下

<template>
	<div>
		<!--假设这是一个按钮-->
		<h1>Login模板组件内容</h1>
		<!--引用组件-->
		<button-com></button-com>
	</div>
</template>
<script>
	//将当前页面中template模板组件暴漏出去,名称为button-com
	import MyButton from "./mybutton";
    export default {
        name: "login-com",//当前组件名
        components:{
        	ButtonCom//引用的组件名,转换为PascalCase命名法
        }
    }
</script>
### Vue 动态组件 `<component>` 的参数传递 在 Vue 中,动态组件 `<component>` 可以通过 `:is` 属性来指定要渲染的具体组件名称。为了向动态组件传递参数,可以利用 Vue 提供的标准属性绑定机制实现数据传输。 以下是具体的实现方式: #### 使用 `v-bind` 或者简写语法 `:` 进行参数传递 可以通过 `v-bind` 将父级的数据作为 props 传递到子组件中。例如,在模板部分可以直接使用以下代码完成参数传递[^1]: ```vue <template> <keep-alive> <!-- 绑定 is 属性并传递 parentProp 参数 --> <component :is="currentComponent" :parent-prop="parentProp"></component> </keep-alive> </template> <script> export default { props: { parentProp: { type: String, required: true } }, data() { return { currentComponent: 'YourDynamicComponent' // 当前显示的动态组件名 }; } }; </script> ``` 在此示例中,`:is` 被用来决定当前应该加载哪个组件,而 `:parent-prop` 则用于将来自父组件的数据传递至目标动态组件。 #### 关于 `keep-alive` 缓存的作用 如果希望减少不必要的重新渲染操作,则可以在外部嵌套一层 `<keep-alive>` 来缓存那些未被激活但仍需保留状态的组件实例[^3]。这有助于提升性能表现,尤其是在频繁切换多个相似功能模块的情况下尤为有用。 #### 配合路由使用的场景说明 尽管本案例并未涉及具体路径配置相关内容,但在实际开发过程中,有时也会结合 vue-router 实现更复杂的交互逻辑[^4]。不过需要注意的是,此时应区分清楚两者之间的职责边界——前者负责局部区域内的灵活变化处理;后者则主要针对全局导航层面提供支持服务。 综上所述,上述方法展示了如何借助标准 prop 系统以及特殊指令(如 `:is`),轻松达成跨不同类型的 Vue 子部件间的信息共享需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值