Component组件基本概念

Component组件的必备元素
1.装饰器:@Component()

    用来告知Angular如何处理TypeScript类,包括多个属性,属性值叫做原数据,Angular框架根据原数据值渲染组件并执行组件的逻辑。

2.模板:Template

    定义组件外件,以html形式存在,告知Angular如何渲染组件,可以在模板中使用Angular数据绑定语法来呈现控制器中的数据

3 控制器:Controller

   普通的TypeScript类,被装饰器装饰,包含组件所有的属性和方法,大多数界面的逻辑也写在控制器中,控制器通过数据绑定和模板通信,模板展现控制器的数据,控制器处理模板上发生的事件。

对应代码讲解:

import { Component } from '@angular/core';
@Component({
  selector: 'app-root',//组件可以通过app-root标签调用
  templateUrl: './app.component.html',//
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app';
}

解释:1)第一行impotr:从angular核心模块中引入了名为Component装饰器;

         2)第二行至第六行@Component:用装饰器定义了组件以及组件的原数据;//装饰器中的内容为原数据

         3)AppComponent:一个普通的typescript类;

Component可选属性:

1.输入属性:@Inputs()

  用来接收外部传入数据,使得父组件可以直接传数据给子组件;

2.提供器:providers

  用来做依赖注入;

3.生命周期钩子:Lifecycle Hooks

  组件从创建到销毁的过程中,可以有多个钩子触发;

4.样式表:styles

  提供组件专用样式;

5.动画:Animations

   方便创建与组件相关的动画效果,如入和出效果;

6.输出属性:@Outputs

   用来定义其他组件可能感兴趣的事件,和组件间共享数据。

### Vue 中 Component 动态组件的使用方法 #### 基本概念 在 Vue 中,`<component>` 是一个特殊的内置元素,用于动态地挂载不同类型的组件。它通过 `is` 属性来决定具体渲染哪个组件[^2]。 #### 项目结构示例 假设有一个简单的 Vue 项目结构如下: ```plaintext . ├── package.json └── src ├── App.vue ├── components │ ├── ComponentA.vue │ ├── ComponentB.vue │ └── ComponentC.vue └── main.js ``` 其中,`ComponentA.vue`, `ComponentB.vue`, 和 `ComponentC.vue` 是三个独立的子组件。 --- #### 示例代码:基本用法 以下是 `<component>` 的基础实现方式: ```vue <!-- ParentComponent.vue --> <template> <div> <!-- 使用 component 标签并绑定 is 属性 --> <component :is="currentComponent"></component> <!-- 切换按钮 --> <button @click="changeToA">切换到 A</button> <button @click="changeToB">切换到 B</button> <button @click="changeToC">切换到 C</button> </div> </template> <script> import ComponentA from './components/ComponentA.vue'; import ComponentB from './components/ComponentB.vue'; import ComponentC from './components/ComponentC.vue'; export default { data() { return { currentComponent: 'ComponentA', // 默认显示 ComponentA }; }, methods: { changeToA() { this.currentComponent = 'ComponentA'; }, changeToB() { this.currentComponent = 'ComponentB'; }, changeToC() { this.currentComponent = 'ComponentC'; }, }, components: { ComponentA, ComponentB, ComponentC, }, }; </script> ``` 在这个例子中,通过改变 `currentComponent` 的值可以动态切换展示的组件[^3]。 --- #### 异步加载组件 为了优化性能,Vue 支持异步加载组件。可以通过 JavaScript 的 `defineAsyncComponent` 方法或者直接返回 Promise 来定义异步组件。 ##### 示例代码:异步加载组件 ```javascript // 定义异步组件 const AsyncComponentA = defineAsyncComponent(() => import('./components/ComponentA.vue') ); export default { components: { AsyncComponentA, }, }; ``` 在这种情况下,当组件被首次访问时才会触发导入操作,从而减少初始页面加载时间。 --- #### 父子组件通信 如果需要在父组件和子组件之间传递数据或事件,则可以利用 props 和自定义事件完成通信[^4]。 ##### 示例代码:父子组件通信 **ParentComponent.vue** ```vue <template> <div> <child-component :message="parentMessage" @custom-event="handleCustomEvent"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { data() { return { parentMessage: '来自父组件的消息', }; }, methods: { handleCustomEvent(data) { console.log('接收到子组件的数据:', data); }, }, components: { ChildComponent, }, }; </script> ``` **ChildComponent.vue** ```vue <template> <div> {{ message }} <button @click="sendDataToParent">发送消息给父组件</button> </div> </template> <script> export default { props: ['message'], methods: { sendDataToParent() { const eventData = '这是子组件发来的数据'; this.$emit('custom-event', eventData); }, }, }; </script> ``` 在这里,父组件向子组件传递了一个名为 `message` 的 prop,并监听了子组件发出的 `custom-event` 自定义事件。 --- ### 注意事项 1. **组件中的 Data 必须为函数式**: 如果在一个 Vue 组件中定义 `data` 配置项,那么它的值必须是一个函数而不是对象,以确保每个实例都有独立的状态副本[^1]。 2. **动态组件销毁行为**: 当动态组件发生切换时,默认会保留之前的 DOM 节点而不销毁它们。如果希望完全销毁旧组件,在 `<keep-alive>` 外部使用 `<component>` 即可。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值