前往小程序,Get更优阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 >angular面试题及答案_angular面试

angular面试题及答案_angular面试

作者头像
全栈程序员站长
发布2022-11-02 11:39:05
10.7K0
发布2022-11-02 11:39:05
举报
文章被收录于专栏: 全栈程序员必看 全栈程序员必看

1. 生命周期钩子

生命周期的顺序,见下图:

angular面试题及答案_angular面试
angular面试题及答案_angular面试
  • ngOnChanges:当组件数据绑定的输入属性发生变化是触发,该方法接收一个SimpleChanges对象,包括当前值和上一个属性值。首次调用一定发生在ngOnInit前,值得注意的是该方法仅限于对象的引用发生变化时才会触发。
  • ngOninit:初始化指令或组件,在angular第一次显示展示组件的绑定属性后调用,该方法只会调用一次
  • ngDocheck:检测

ngAfterContentInit:当把内容投影进组件之后调用,第一次调用ngDocheck()之后调用,只调用一次,只适用于组件

ngAfterContentChecked:每次完成被投影组件内容的变更检测之后调用,只适用于组件

ngAfterViewInit:在angular初始化组件及其子组件的视图之后调用,只调用一次,只适用于组件

ngAfterViewChecked:每次做完组件视图和子视图的变更检测之后调用,只适用于组件

  • ngOnDestroy:在angular每次销毁组件或指令之前调用,通常用于移除事件监听,退订可观察对象。

详细案例分析见: https://blog.csdn.net/it_rod/article/details/79433887

angular面试题及答案_angular面试
angular面试题及答案_angular面试

2. 指令分类

组件:用于构建UI组件,继承于Directive类

属性指令:用于改变组件的外观或行为

  • ngClass
  • ngStyle

结构指令:用于动态添加或删除DOM元素来改变DOM布局

  • ngIf
  • ngFor
  • ngSwitch

自定义指令

3. 父子组件之间的数据传递

  • @Input 父组件向子组件传递数据和传递方法(子组件中使用)
  • @output 子组件传值给父组件 (事件传递的方式)(子组件中使用)
代码语言:javascript
复制
//子组件中使用事件发射器
@output()  somethingChanged = new EventEmitter();
somethingChanged.emit(value);
  • 使用@ViewChid 父组件通过局部变量获取子组件的引用,主动获取子组件的数据和方法(父组件中使用)

4. 双向数据绑定的原理

  • data => view:数据绑定,模板语法 [ ]
  • view => data: 事件绑定,模板语法()
  • angular的双向数据绑定就是 数据绑定 + 事件绑定 ,模板语法 [()]

5. 组件和指令的区别

  • component使用注解@Component修饰,directive使用注解@Directive修饰
  • component是组件化思想,基于组件创建应用,把应用划分成细小的可重复利用的组件,而directive用来在已经存在的DOM元素上实现一些行为
  • component是可重复使用的组件,directive是可重复使用的行为
  • component可创建一个view,即template或templateUrl,而directive没有。

6. ng-content指令?

像p标签或者h1标签,在标记之间可以添加内容,eg: <p>this is a paragraph</p>.那我们如果想在angular的标签之间添加内容呢,例如在<app-test></app-test>,这种情况下就可以使用<ng-content>tag directive is used</ng-content>

7. router.navigate 的使用?

当我们想路由到一个组件的时候使用router.navigate this.router.navigate(['./component name'])

8. 什么是ViewEncapsulation

ViewEncapsulation 决定组件中定义的样式是否会影响整个应用程序。在Angular中有三种方法可以做到这一点: Emulated : 样式从其他HTML传播到组件。 Native : 来自其他HTML的样式不会传播到组件。 None:组件中定义的样式对所有组件都是可见的。

9. RouterOutlet

<router-outlet></router-outlet> 简单理解:页面占位符,决定component显示在哪里,最终会被相应的component的view替换掉

10. { {}}

与HTML标签一起使用,eg: <h1>{ {var}}</h1> var 是来自于ts(component)中的值。

11. 有几种数据绑定方式?

  • 属性绑定 [ ]
  • 事件绑定()
  • 双向数据绑定 [()]

12. 单页面应用和传统的web技术有什么不同?

在传统的web技术中,客户端请求一个web页面(HTML/JSP/asp),服务器返回资源(或HTML页面),客户端再次请求另一个页面,服务器用另一个资源响应。问题就在于请求/响应中消耗了大量时间,或者是重新加载使用了大量时间。而在SPA技术中,即使URL不断变化,我们也只维护一个页面(index.HTML)。

13. Observables 和Promises的区别

  • Observables 是惰性的,意思是在subsciption之前什么都不会发生。

Promise是eager的,意思是一旦创建,就会执行

  • Observable是一个stream,可以传递0,1,或者多个事件,并且为每个事件回调。

Promise只处理一个事件

  • Observable可取消

Promise不可取消

14. AsyncPipe ?

当observable或promise返回data时,我们使用一个临时属性来保存内容。稍后,我们将相同的内容绑定到模板。通过使用AsyncPipe, promise或observable可以直接在模板中使用,而不需要临时属性。

15. Authentication and Authorization的区别?

  • Authentication (认证) : 用户登录凭据传递给(服务器上的)认证API。在服务器端验证凭据并返回JSON Web Token(JWT)。JWT是一个JSON对象,它有关于当前用户的一些信息或属性。一旦JWT返回给给客户端,客户端或用户将被该JWT所标记。
  • Authorization(授权):登录成功后,经过身份验证或真正的用户不能访问所有内容。用户未被授权访问其他人的数据,他/她被授权访问某些数据。

16. AOT编译 和JIT编译?

  • Just-In-Time (JIT) 生成的JS代码,在浏览器中进行。

— 大概的开发流程: – 使用Typescript开发 – 使用tsc编译 – 打包、压缩、部署 部署好之后,用户在浏览器端: – 浏览器下载js代码 – angular启动,在浏览器中开始JIT的编译过程 – 渲染页面

  • Ahead-of-Time(AOT)生成的是TS代码

— 流程: – typescript开发angular应用 – 用ngc编译 用angular编译器对模板进行编译,生成typescript代码 typescript编译车JavaScript – 打包部署 用户端 – 下载代码 – 启动angular – 页面渲染 AOT优势   1、渲染得更快   2、需要的异步请求更少   3、需要下载的Angular框架体积更小   4、提早检测模板错误   5、更安全 JIT优势   编译时间短,除非确实有动态组件的需求,否则jit唯一的优势就是能用来做在线 Demo和开发调试。

17. 什么是Redux?

它是一个帮助我们维护应用程序状态的库。简单的数据流应用程序不需要Redux,它用于具有复杂数据流的单页应用程序。

18. 什么是Pipes?

此功能用于更改模板上的输出;比如将字符串更改为大写并在模板上显示它。它还可以相应地更改日期格式。

19. ng-Class 和 ng-Style的区别

  • ng-Class: 加载css类
  • ng-Style:设置css样式

20. component和module的区别?

  • component控制视图(html).组件之间以及组件和service之间互相交互给app提供功能
  • module是包括一个或多个组件,module不会控制视图(HTML)。module声明了哪些模块可以被其他模块使用,依赖注入了哪些类,以及启动的component,模块来管理组件,使app实现模块化。

21. 怎样在组件中选择一个元素?

在组件的constructor中引入 ElementRef 来操作DOM元素 constructor(myElement: ElementRef) { ... }

22. 设置base href 标签的作用?

angular路由器使用base href 作为组件、模板的基地址,开发期间,通常会在index.html所在目录中启动服务器,所以这个目录就是根目录,所以可以在index.html 的顶部添加<base href=”/”>。 当没有配置base标签时,加载应用会失败。

23. Observer / Observable

  • Observable(可观察者) 接受一个Observer作为参数然后返回unsubscribe函数

– 特征: — 是一个函数 — 接受一个Observer对象(包含next、error、complete方法的对象)作为参数 — 返回 unsubscribe 函数,用于取消订阅 – 作用: — 作为生产者和观察者之间的桥梁,并返回一种方法来解除生产者和观察者之间的关系,其中观察者用于处理时间 序列上的数据流。

  • Observer (观察者)对象

观察者用来接收可观察者发送过来的消息 var observer = { next : x => console.log('Observer got a next value' + x), error : err => console.error('Observer got a error:' + err), complete: () => console.log('Observer got a complete notification') } 使用 observable.subscribe(observer);

24. Constructor 和 ngOnInit 的本质区别

  • Constructor

在ES6中 constructor表示构造函数,使用在class中。来初始化操作。当类被初始化之后,构造函数会被调用

  • ngOnInit

ngOnInit 是angular中OnInit钩子的实现,用来初始化组件。 ngOnInit : 在angular 第一次显示数据绑定和设置指令、组件的输入属性之后,初始化指令、组件 所以从angular的生命周期看,constructor是执行在先的 所以既然ngOnchanges是输入属性发生变化的时候调用,并且ngOnInit是在ngOnchanges执行之后才调用,而constructor是在组件实例化的时候就调用了,也就是说,在constructor中是取不到输入属性的值的。

  • 使用场景

  • constructor 中不适合进行任何和组件通信类似的复杂操作,一般在constructor中进行一些简单的初始化操作,比如依赖注入、变量初始化等。
  • ngOnInit可以用来初始化组件之间通信的,如异步请求等

参考: https://www.jianshu.com/p/af1d8f597b29

25. Angular的懒加载

默认情况下,在初始化的时候所有路由都会加载,导致加载缓慢,启动速度慢,所以可以使用懒加载 懒加载 : 通俗 的讲就是进入主模块之后,子模块不加载,等真正访问到子模块之后,再去加载。使用loadChildren配置路由 知识点:

  • RouterModule.forRoot() 用于主模块
  • RouterModule.forChild() 用于子模块
  • loadChildren

const routes: Routes = [ {path:'',redirectTo:'child'}, {path:'child',loadChildren:'./children-load/children-load.module#ChildrenLoadModule'}, {path:'childNew',loadChildren:'./children-newload/children-newload.module#ChildrenNewloadModule'} ];

26. 如何优化Angular 2应用程序来获得更好的性能?

1)考虑AOT编译。 2)确保应用程序已经经过了捆绑,uglify和tree shaking。 3)确保应用程序不存在不必要的import语句。 4)确保应用中已经移除了不使用的第三方库。 5)所有dependencies 和dev-dependencies都是明确分离的。 6)如果应用程序较大时,我会考虑延迟加载而不是完全捆绑的应用程序。

27. 使用Angular的好处

  • 可以添加自定义的directive.
  • 优秀的社区支持。
  • 客户端和服务器的通讯非常便利。
  • 强大的功能比如动画和事件处理。
  • 使用mvc模式。
  • 支持双向数据绑定。
  • 支持依赖注入, restful service和有效验证。

28. Angular的核心部件有哪些?

1、模块(Modules) 2、组件(Components) 3、模版(Templates) 4、元数据(Metadata) 5、数据绑定(Data Binding) 6、指令(Directives) 7、服务(Services) 8、依赖注入(Dependency Injection) 9、路由(routing)

29. 列举一下Angular中的filter类型

Currency. Date. Filter. Json. limitTo lowercase number orderBy

30. Dirty check是怎么回事?

Dirty check是比较新的数据跟老的数据的差别,如果看到有改变, 就用新的数据更新现有的视图。

31. DOM和BOM的区别是什么?

  • Dom是document object model。Bom是browser object model。
  • DOM代表的是网页的内容。Bom包含dom, 它还包含有浏览器的属性。
  • Dom是一棵树结构,通过对应的API来访问里面的数据。Bom包含在全局的JavaScript对象里面,是window object的子成员。
  • Dom用来操作html文档。Bom用来操作浏览器窗口。
  • Dom有w3c的标准。Bom,对各个浏览器来说都是有自己具体的实现,都不一样。

32.模板驱动表单和 响应式表单的比较

Template-Driven Forms (模板驱动表单) 的特点

  • 使用方便
  • 适用于简单的场景
  • 通过 [(ngModel)] 实现数据双向绑定
  • 最小化组件类的代码
  • 不易于单元测试

Reactive Forms (响应式表单) 的特点

  • 比较灵活
  • 适用于复杂的场景
  • 简化了HTML模板的代码,把验证逻辑抽离到组件类中
  • 方便的跟踪表单控件值的变化
  • 易于单元测试

33. ContentChild 与 ViewChild 的异同点

相同点

  • 都是属性装饰器
  • 都有对应的复数形式装饰器:ContentChildren、ViewChildren
  • 都支持 Type<any>|Function|string 类型的选择器

不同点

  • ContentChild 用来从通过 Content Projection 方式 (ng-content) 设置的视图中获取匹配的元素
  • ViewChild 用来从模板视图中获取匹配的元素
  • 在父组件的 ngAfterContentInit 生命周期钩子中才能成功获取通过 ContentChild 查询的元素
  • 在父组件的 ngAfterViewInit 生命周期钩子中才能成功获取通过 ViewChild 查询的元素

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180881.html原文链接:https://javaforall.cn

本文参与  腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年10月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与  腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
目录
  • 1. 生命周期钩子
  • 2. 指令分类
  • 3. 父子组件之间的数据传递
  • 4. 双向数据绑定的原理
  • 5. 组件和指令的区别
  • 6. ng-content指令?
  • 7. router.navigate 的使用?
  • 8. 什么是ViewEncapsulation
  • 9. RouterOutlet
  • 10. { {}}
  • 11. 有几种数据绑定方式?
  • 12. 单页面应用和传统的web技术有什么不同?
  • 13. Observables 和Promises的区别
  • 14. AsyncPipe ?
  • 15. Authentication and Authorization的区别?
  • 16. AOT编译 和JIT编译?
  • 17. 什么是Redux?
  • 18. 什么是Pipes?
  • 19. ng-Class 和 ng-Style的区别
  • 20. component和module的区别?
  • 21. 怎样在组件中选择一个元素?
  • 22. 设置base href 标签的作用?
  • 23. Observer / Observable
  • 24. Constructor 和 ngOnInit 的本质区别
  • 25. Angular的懒加载
  • 26. 如何优化Angular 2应用程序来获得更好的性能?
  • 27. 使用Angular的好处
  • 28. Angular的核心部件有哪些?
  • 29. 列举一下Angular中的filter类型
  • 30. Dirty check是怎么回事?
  • 31. DOM和BOM的区别是什么?
  • 32.模板驱动表单和 响应式表单的比较
  • 33. ContentChild 与 ViewChild 的异同点
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
产品介绍 产品文档
精选特惠 用云无忧
领券
问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

代做工资流水公司烟台打个人流水泰州代开离职证明揭阳代办银行流水电子版长沙查询银行流水账单无锡银行流水PS苏州自存流水淮安签证银行流水 打印南通开贷款流水佛山贷款银行流水价格湘潭打个人工资流水宜昌流水单公司盐城企业对公流水费用扬州代开工资流水单宁波企业对私流水代办珠海转账银行流水报价商丘签证工资流水公司汕头开房贷流水台州查询个人流水沈阳银行流水代开宜昌房贷流水模板台州打印工资流水淄博日常消费流水模板徐州企业对公流水查询曲靖流水代开西安签证银行流水 费用西宁工资流水app截图开具大庆转账流水多少钱银川工资流水代办银行流水单制作鞍山办理个人银行流水香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化