angular 面试题

6,105 阅读3分钟

1、 常用到的装饰器

  • component 组件
  • directive 指令
  • pipe 管道
  • ngModule 模块
  • input 父传子 输入
  • output 子传父 传出

2、 生命周期

  • ngOnChanges
    设置或重新设置数据绑定的输入属性时响应。 该方法接受当前和上一属性值的 SimpleChanges 对象 注意,这发生的非常频繁,所以你在这里执行的任何操作都会显著影响性能
  • ngOnInit
    第一次显示数据绑定和设置指令/组件的输入属性之后,初始化指令/组件
  • ngDoCheck
    检测,并在发生 Angular 无法或不愿意自己检测的变化时作出反应
  • ngAfterContentInit
    外部内容投影进组件视图或指令所在的视图之后调用
  • ngAfterContentChecked
    检查完被投影到组件或指令中的内容之后调用
  • ngAfterViewInit
    初始化完组件视图及其子视图或包含该指令的视图之后调用
  • ngAfterViewChecked
    做完组件视图和子视图或包含该指令的视图的变更检测之后调用
  • ngOnDestroy
    每当 Angular 每次销毁指令/组件之前调用并清扫。 在这儿反订阅可观察对象和分离事件处理器,以防内存泄漏

3、组件初始化时生命周期钩子调用顺序

ngOnChanges => ngOnInit => ngDoCheck => ngAfterContentInit => ngAfterContentChecked => ngAfterViewInit =>ngAfterViewChecked

4、父子组件初始化时生命周期钩子调用顺序

parent-ngOnChanges
parent-ngOnInit
parent-ngDoCheck
parent-ngAfterContent
parent-ngAfterContentked
child-ngChanges
child-ngOnInit
child-ngDoCheck
child-ngAfterContentInit
child-ngAfterContentChecked
child-ngAfterViewInit
child-ngAfterViewChecked
parent-ngAfterViewInit
parent-ngAfterViewChecked

再次检测时
parent-ngDoCheck
parent-ngAfterContentked
child-ngDoCheck
child-ngAfterContentChecked
child-ngAfterViewChecked
parent-ngAfterViewChecked

5、父子之间通信

  • 装饰器 input output
  • service

6、 在 onpush 策略下什么时候会解变更检测

  • 输入值更改时,要是引用值得地址更改
  • 创建的事件函数调用时 如 click

子组件变更检测会触发父组件变更检测

7、rxjs(可观察对象) 和 Promise(承诺) 对比有那些好处

  • 可观察对象是声明式的,在被订阅之前,它不会开始执行。承诺是在创建时就立即执行的。这让可观察对象可用于定义那些应该按需执行的内容
  • 可观察对象能提供多个值。承诺只提供一个。这让可观察对象可用于随着时间的推移获取多个值
  • 可观察对象会区分串联处理和订阅语句。承诺只有 .then() 语句。这让可观察对象可用于创建供系统的其它部分使用而不希望立即执行的复杂内容
  • 可观察对象的 subscribe() 会负责处理错误。承诺会把错误推送给它的子承诺。这让可观察对象可用于进行集中式、可预测的错误处理

8、rxjs 中 Subject、ReplaySubject、BehaviorSubject、AsyncSubject的区别

  • Subject 先发布后订阅的情况下,订阅无法拿到值
  • ReplaySubject 先发布后订阅情况下,订阅能拿到值,值的多少取决于参数
  • BehaviorSubject 先发布后订阅情况下,拿最新一次发布值,可以设置初始发
  • AsyncSubject 结束订阅的情况下,拿最新的数据

ReplaySubject、BehaviorSubject、AsyncSubject 三者都继承于Subject,都算是其变体

文中如有错误,欢迎在评论区指正,如果这篇文章帮助到了你,欢迎点赞和关注

未完待续。。。