angular学习笔记之ngOnInit方法和constructor的区别

本文探讨Angular中constructor和ngOnInit的区别。constructor是类的构造函数,用于对象实例化时初始化和属性赋值,而ngOnInit是初始化组件的生命周期钩子,执行在数据绑定和设置组件输入属性之后。constructor在ngOnInit之前执行,并且不适用于处理输入属性,因为它无法在构造函数中获取到输入属性的值。
      最近在学习angular英雄demo时,发现中文文档上说了如图这一段话;虽然这里介绍了ngOnInit方法和constructor的区别,但是我觉得太过笼统。为什么构造器不能调用某个函数来向远端发送http请求(虽然在构造器中处理逻辑不规范),于是自己找了些资料整理了一下。

1、constructor

    constructor是class的构造函数,当对象被实例化的时候被调用;这里经常处理初始化和给属性赋值的动作;如图:

    

    

2、ngOnInit

    ngOnInit是实现了OnInit生命钩子,用来初始化组件;在官网的文档上的说明如下:


区别:

    1)执行顺序,constructor和ngOnInit都能进行初始化,那它们的执行先后顺序是什么呢?看下图demo


        我们发现constructor是在ngOnInit之前执行的,说明constructor是在组件实例化时就已经执行了;在官网文档中说ngOnInit是在第一次显示数据绑定和设置组件的输入属性之后,初始化组件的;那constructor是否能设置组件的输入属性呢?

    2)输入属性

HerosComponent是父组件

        HeroDetailComponent是子组件,pname为父组件的输入属性



运行结果:

说明在construct中取不到输入属性的值

所以官网文档中说 它肯定不能调用某个函数来向远端服务(比如真实的数据服务)发起 HTTP 请求。



### Angular 构造函数与 ngOnInit 生命周期钩子的区别 #### 构造函数的作用 构造函数主要用于依赖注入。当组件实例化时,Angular 使用反射机制调用类的构造函数并传入所需的依赖项。这使得开发者可以在创建对象的同时获取所需的服务其他依赖资源[^3]。 ```typescript import { Component } from '@angular/core'; import { SomeService } from './some.service'; @Component({ selector: 'app-example', template: `<div></div>` }) export class ExampleComponent { constructor(private someService: SomeService) {} } ``` #### ngOnInit 的作用 `ngOnInit` 是 Angular 组件生命周期中的一个重要阶段,在此期间可以执行初始化逻辑。它会在第一次检测变更之前被调用一次,并且此时所有的输入属性都已经设置完毕。因此适合用于处理那些需要等待数据绑定完成的任务,比如订阅 Observable 或者发起 HTTP 请求等操作[^1]。 ```typescript import { Component, OnInit } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Component({ selector: 'app-data-fetcher', templateUrl: './data-fetcher.component.html' }) export class DataFetcherComponent implements OnInit { data: any; constructor(private http: HttpClient) {} ngOnInit(): void { this.http.get('/api/data').subscribe(response => { this.data = response; }); } } ``` 通过上述对比可以看出: - **时机不同**:构造器是在组件实例刚创建的时候立即运行;而 `ngOnInit` 则稍晚一些,在首次渲染前触发。 - **用途差异**:前者主要负责依赖注入服务配置工作;后者则更适合用来做更复杂的业务逻辑准备以及与其他服务交互的工作。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值