angular interview questions和答案
如果您喜欢该项目,请单击@sudheerjonna以获取技术更新。
- 以这个角度的方式从一个完整的角度初学者到自信地从头开始构建企业级应用程序
- 如果您认真雇用并且没有CS学位,请参加此编码面试训练营
目录
| 不。 | 问题 |
|---|---|
| 1 | 什么是角框架? |
| 2 | Angularjs和Angular之间有什么区别? |
| 3 | 什么是打字稿? |
| 4 | 写出角度建筑的图表? |
| 5 | 角度的关键组成部分是什么? |
| 6 | 什么是指令? |
| 7 | 什么是组件? |
| 8 | 组件和指令之间有什么区别? |
| 9 | 什么是模板? |
| 10 | 什么是模块? |
| 11 | 什么是生命周期挂钩? |
| 12 | 什么是数据绑定? |
| 13 | 什么是元数据? |
| 14 | 什么是角CLI? |
| 15 | 构造函数和ngoninit有什么区别? |
| 16 | 什么是服务 |
| 17 | 什么是角度注入角度? |
| 18 | 如何形成依赖性层次结构? |
| 19 | 异步管的目的是什么? |
| 20 | 在内联和外部模板文件之间可以选择什么? |
| 21 | *ngfor指令的目的是什么? |
| 22 | NGIF指令的目的是什么? |
| 23 | 如果您在模板中使用脚本标签会发生什么? |
| 24 | 什么是插值? |
| 25 | 什么是模板表达式? |
| 26 | 什么是模板语句? |
| 27 | 您如何对数据绑定类型进行分类? |
| 28 | 什么是管道? |
| 29 | 什么是参数化管道? |
| 30 | 您如何链管? |
| 31 | 什么是自定义管道? |
| 32 | 举一个自定义管道的例子? |
| 33 | 纯管道和不纯管有什么区别? |
| 34 | 什么是自举模块? |
| 35 | 什么是可观察的? |
| 36 | 什么是HTTPCLIENT及其好处? |
| 37 | 解释如何使用httpclient与示例使用? |
| 38 | 您如何阅读完整的回复? |
| 39 | 您如何执行错误处理? |
| 40 | 什么是RXJS? |
| 41 | 什么是订阅? |
| 42 | 什么是可观察的? |
| 43 | 什么是观察者? |
| 44 | 承诺和可观察到的区别是什么? |
| 45 | 什么是多播? |
| 46 | 您如何执行可观察到的错误处理? |
| 47 | 订阅方法的速记符号是什么? |
| 48 | RXJ提供了什么实用程序功能? |
| 49 | 可观察到的创建功能是什么? |
| 50 | 如果您不为观察者提供处理程序会发生什么? |
| 51 | 什么是角元素? |
| 52 | 角元素的浏览器支持是什么? |
| 53 | 什么是自定义元素? |
| 54 | 我需要引导自定义元素吗? |
| 55 | 说明自定义元素在内部工作的工作方式? |
| 56 | 如何将组件转移到自定义元素上? |
| 57 | 角组件和自定义元素之间的映射规则是什么? |
| 58 | 您如何为自定义元素定义打字? |
| 59 | 什么是动态组件? |
| 60 | 哪种指令是什么? |
| 61 | 您如何使用CLI创建指令? |
| 62 | 举一个属性指令的示例? |
| 63 | 什么是角路由器? |
| 64 | 基本HREF标签的目的是什么? |
| 65 | 路由器的进口是什么? |
| 66 | 什么是路由器插座? |
| 67 | 什么是路由器链接? |
| 68 | 什么是活动路由器链接? |
| 69 | 什么是路由器状态? |
| 70 | 什么是路由器事件? |
| 71 | 什么是激活路线? |
| 72 | 您如何定义路线? |
| 73 | 通配符路线的目的是什么? |
| 74 | 我总是需要一个路由模块吗? |
| 75 | 什么是Angular通用? |
| 76 | 角度中有哪些不同类型的汇编? |
| 77 | 什么是吉特? |
| 78 | 什么是AOT? |
| 79 | 为什么我们需要汇编过程? |
| 80 | AOT的优势是什么? |
| 81 | 控制AOT汇编的方法是什么? |
| 82 | 元数据的限制是什么? |
| 83 | AOT的三个阶段是什么? |
| 84 | 我可以在AOT中使用箭头功能吗? |
| 85 | 元数据JSON文件的目的是什么? |
| 86 | 我可以在AOT中使用任何JavaScript功能来表达语法吗? |
| 87 | 什么是折叠? |
| 88 | 什么是宏? |
| 89 | 举一个元数据错误的例子? |
| 90 | 什么是元数据重写? |
| 91 | 您如何提供配置继承? |
| 92 | 您如何指定角模板编译器选项? |
| 93 | 您如何启用绑定表达式验证? |
| 94 | 任何类型的铸造功能的目的是什么? |
| 95 | 什么是非零型断言操作员? |
| 96 | 什么类型狭窄? |
| 97 | 您如何描述角应用中的各种依赖性? |
| 98 | 什么是区域? |
| 99 | 通用模块的目的是什么? |
| 100 | 什么是Codelyzer? |
| 101 | 什么是角动画? |
| 102 | 使用动画模块的步骤是什么? |
| 103 | 什么是状态功能? |
| 104 | 什么是样式功能? |
| 105 | 动画功能的目的是什么? |
| 106 | 什么是过渡功能? |
| 107 | 如何在角度注入动态脚本? |
| 108 | 什么是服务工作者及其在Angular中的作用? |
| 109 | 服务工作人员的设计目标是什么? |
| 110 | 相对于依赖注射,AngularJ和Angular之间有什么区别? |
| 111 | 什么是Angular Ivy? |
| 112 | 常春藤预览中包含哪些功能? |
| 113 | 我可以与常春藤一起使用AOT汇编吗? |
| 114 | 什么是Angular语言服务? |
| 115 | 您如何在项目中安装Angular语言服务? |
| 116 | 是否有任何编辑器支持Angular语言服务? |
| 117 | 说明Angular语言服务提供的功能? |
| 118 | 您如何在应用程序中添加网络工作人员? |
| 119 | 网络工人有什么局限性? |
| 120 | 什么是Angular CLI构建器? |
| 121 | 什么是建筑商? |
| 122 | 您如何调用建筑商? |
| 123 | 您如何用角度创建应用程序外壳? |
| 124 | 角度是什么? |
| 125 | Angular的班级装饰器是什么? |
| 126 | 什么是班级野外装饰员? |
| 127 | 角度可以声明什么? |
| 128 | 对声明类别有什么限制? |
| 129 | 什么是DI令牌? |
| 130 | 什么是Angular DSL? |
| 131 | 什么是RXJS主题? |
| 132 | 什么是Bazel工具? |
| 133 | Bazel工具的优势是什么? |
| 134 | 您如何将Bazel与Angular CLI使用? |
| 135 | 您如何直接运行巴泽尔? |
| 136 | 什么是Angular平台? |
| 137 | 如果我两次导入相同的模块会发生什么? |
| 138 | 如何在组件模板中选择使用元素? |
| 139 | 您如何检测Angular的路线变化? |
| 140 | 您如何通过HTTP客户端通过标头? |
| 141 | CLI中差分负载的目的是什么? |
| 142 | 角度支持动态进口吗? |
| 143 | 什么是懒惰的加载? |
| 144 | 什么是工作区API? |
| 145 | 您如何升级角度版本? |
| 146 | 什么是角材料? |
| 147 | 您如何升级AngularJS的位置服务? |
| 148 | 什么是ngupgrade? |
| 149 | 您如何使用CLI测试Angular应用? |
| 150 | 如何在Angular应用中使用多填充物? |
| 151 | 在角度触发变化检测的方法是什么? |
| 152 | 各种Angular的差异是什么? |
| 153 | 角度有哪些安全原则? |
| 154 | 贬低网络跟踪框架的原因是什么? |
| 155 | 贬低Web Worker软件包的原因是什么? |
| 156 | 您如何找到Angular CLI版本? |
| 157 | 浏览器对角的支持是什么? |
| 158 | 什么是示意图 |
| 159 | 示意图的规则是什么? |
| 160 | 什么是示意图CLI? |
| 161 | Angular中安全性的最佳实践是什么? |
| 162 | 什么是防止XSS攻击的角度安全模型? |
| 163 | 模板编译器在预防XSS攻击方面的作用是什么? |
| 164 | 角度的各种安全环境是什么? |
| 165 | 什么是消毒?角度支持它吗? |
| 166 | InnerHTML的目的是什么? |
| 167 | 插值内容和InnerHTML有什么区别? |
| 168 | 您如何防止自动消毒? |
| 169 | 在安全性方面使用直接DOM API方法安全吗? |
| 170 | 什么是DOM消毒剂? |
| 171 | 您如何在Angular应用程序中支持服务器端XSS保护? |
| 172 | 角度是否可以防止HTTP级别的漏洞? |
| 173 | 什么是HTTP拦截器? |
| 174 | HTTP拦截器的应用是什么? |
| 175 | 在角度支持多个拦截器吗? |
| 176 | 如何将拦截器用于整个应用程序? |
| 177 | 角度如何简化国际化? |
| 178 | 您如何手动注册语言环境数据? |
| 179 | 模板翻译的四个阶段是什么? |
| 180 | I18N属性的目的是什么? |
| 181 | 自定义ID的目的是什么? |
| 182 | 如果自定义ID不是唯一的,会发生什么? |
| 183 | 我可以在不创建元素的情况下翻译文本吗? |
| 184 | 如何翻译属性? |
| 185 | 列出多元化类别? |
| 186 | 什么是选择ICU表达式? |
| 187 | 您如何报告缺少翻译? |
| 188 | 您如何为多个地区提供构建配置? |
| 189 | 什么是角图书馆? |
| 190 | 什么是AOT编译器? |
| 191 | 如何在组件模板中选择一个元素? |
| 192 | 什么是测试床? |
| 193 | 什么是量角器? |
| 194 | 什么是收藏? |
| 195 | 您如何为库创建原理图? |
| 196 | 您如何在Angular中使用jQuery? |
| 197 | 没有提供HTTP例外提供商的原因是什么? |
| 198 | 什么是路由器状态? |
| 199 | 如何在Angular项目中使用Sass? |
| 200 | 隐藏财产的目的是什么? |
| 201 | NGIF和隐藏属性有什么区别? |
| 202 | 什么是切片管? |
| 203 | NGFOR指令中的索引属性是什么? |
| 204 | NGFOR Trackby的目的是什么? |
| 205 | Ngswitch指令的目的是什么? |
| 206 | 是否可以对输入和输出进行混叠? |
| 207 | 什么是安全导航操作员? |
| 208 | Angular9是否需要任何特殊的配置? |
| 209 | 什么是Angular9中的SAFE TESTBED API变化? |
| 210 | 是否必须通过Viewchild通过静态标志? |
| 211 | 模板表达操作员的列表是什么? |
| 212 | 管道和三元操作员之间的优先级是什么? |
| 213 | 什么是入口组件? |
| 214 | 什么是自举组件? |
| 215 | 您如何手动引导应用程序? |
| 216 | Boottrapped组件是否有必要成为输入组件? |
| 217 | 什么是路由入口组件? |
| 218 | 为什么不需要每次使用入门记录阵列? |
| 219 | 我是否仍需要在Angular9中使用入口程序数组? |
| 220 | 这是生产构建中产生的所有组件吗? |
| 221 | 什么是角编译器? |
| 222 | ngmodule元数据在编译过程中的作用是什么? |
| 223 | 角度查找组件,指令和管道如何? |
| 224 | 给NGMODULE的例子很少? |
| 225 | 什么是功能模块? |
| 226 | CLI生成的特征模块中的导入模块是什么? |
| 227 | NGMODULE和JAVASCRIPT模块之间有什么区别? |
| 228 | 声明可能会有什么错误? |
| 229 | 使用声明元素的步骤是什么? |
| 230 | 如果特征模块中使用的browsermodule会发生什么? |
| 231 | 功能模块的类型是什么? |
| 232 | 什么是提供商? |
| 233 | 提供商范围的建议是什么? |
| 234 | 您如何将提供商范围限制为模块? |
| 235 | 您如何提供单身服务? |
| 236 | 删除重复服务注册的不同方法是什么? |
| 237 | FreOT方法如何有助于避免重复的路由器实例? |
| 238 | 什么是共享模块? |
| 239 | 我可以使用模块共享服务吗? |
| 240 | 您如何获得目前的环境方向? |
| 241 | 什么是NGCC? |
| 242 | 声明不应该添加哪些类? |
| 243 | 什么是ngzone? |
| 244 | 什么是Noopzone? |
| 245 | 如何创建DisplayBlock组件? |
| 246 | 更改检测的数据更改方案是什么? |
| 247 | 什么是区域上下文? |
| 248 | 一个区域的生命周期钩是什么? |
| 249 | NGZONE用于控制变更检测的方法是什么? |
| 250 | 您如何更改区域j的设置? |
| 251 | 您如何触发动画? |
| 252 | 您如何在不同级别的提供商配置注射器? |
| 253 | 是否必须在每个服务类中使用注射剂? |
| 254 | 什么是可选的依赖性? |
| 255 | 喷油器层次结构是什么类型? |
| 256 | 什么是反应性形式? |
| 257 | 什么是动态形式? |
| 258 | 什么是模板驱动的形式? |
| 259 | 反应性形式和模板驱动形式之间有什么区别? |
| 260 | 组形成控制的不同方法是什么? |
| 261 | 您如何更新表单模型的特定属性? |
| 262 | Form Builder的目的是什么? |
| 263 | 您如何验证表单上的模型变化? |
| 264 | NGModel提供了哪些州CSS类? |
| 265 | 您如何重置表格? |
| 266 | 验证器功能的类型是什么? |
| 267 | 您可以举一个内置验证器的示例吗? |
| 268 | 您如何优化异步验证器的性能? |
| 269 | 如何将NGFOR和NGIF设置在同一元素上? |
| 270 | CSS中的主机属性是什么? |
| 271 | 您如何获得当前路线? |
| 272 | 什么是组件测试线束? |
| 273 | 自动内联字体的好处是什么? |
| 274 | 什么是内容投影? |
| 275 | 什么是ng-content及其目的? |
| 276 | 什么是独立组件? |
| 277 | 如何创建独立的组件UING CLI命令? |
| 278 | 如何手动创建独立组件? |
| 279 | 什么是水合? |
| 280 | 什么是角信号? |
| 281 | 用示例解释角信号 |
| 282 | 路由参数是什么?你能解释一下每个人吗? |
| 283 |
-
什么是角框架?
Angular是一个基于打字稿的开源前端平台,它使构建网络,移动和桌面应用程序变得易于使用。该框架的主要特征包括声明模板,依赖注入,端到端工具,从而简化应用程序开发。
⬆回到顶部
-
Angularjs和Angular之间有什么区别?
AngularJS(1.x版)是JavaScript框架,而Angular(2+版)是使用Typescript的AngularJ的完整重写,提供了更好的性能,移动支持,模块化和更现代的体系结构。
这是表格格式的一些主要差异: –
Angularjs 角 它基于MVC架构 这是基于服务/控制器 它使用JavaScript构建应用程序 使用TypeScript构建应用程序 基于控制器概念 这是基于组件的UI方法 不支持移动平台 完全支持移动平台 难以构建SEO友好应用 轻松构建SEO友好应用程序
⬆回到顶部
-
什么是打字稿?
Typescript是由Microsoft创建的JavaScript的强烈键入的Superset,它添加了可选类型,类,异步/等待以及许多其他功能,并将其编译到Plain JavaScript中。 Angular完全用打字稿作为主要语言编写。您可以在全球安装打字稿
npm install -g typescript
让我们看看一个简单的打字稿用法示例: –
function greeter ( person : string ) { return \"Hello, \" + person ; } let user = \"Sudheer\" ; document . body . innerHTML = greeter ( user ) ;
Greeter方法仅允许字符串类型作为参数。
⬆回到顶部
-
写出角度建筑的图表?
角应用的主要构建块显示在下图: –
⬆回到顶部
-
角度的关键组成部分是什么?
Angular具有以下关键组件,
- 组件:这些是控制HTML视图的角应用的基本构建块。
- 模块:一个角模块是一组角度基本构建块,例如组件,指令,服务等。将应用程序分为逻辑片段,每个代码都称为“模块”,执行一个任务。
- 模板:这些代表了角度应用的视图。
- 服务:用于创建可以在整个应用程序中共享的组件。
- 元数据:可以用来向角类添加更多数据。
⬆回到顶部
-
什么是指令?
指令将行为添加到现有的DOM元素或现有组件实例中。
import { Directive , ElementRef , Input } from \'@angular/core\' ; @ Directive ( { selector : \'[myHighlight]\' } ) export class HighlightDirective { constructor ( el : ElementRef ) { el . nativeElement . style . backgroundColor = \'yellow\' ; } }
现在,该指令扩展了HTML元素行为,其黄色背景如下
< p myHighlight > Highlight me! </ p >
⬆回到顶部
-
什么是组件?
组件是Angular应用程序中最基本的UI构建块,该块形成了角度成分树。这些组件是指令的子集。与指令不同,组件始终具有模板,并且在模板中每个元素只能实例化一个组件。让我们看看一个角度的简单示例
import { Component } from \'@angular/core\' ; @ Component ( { selector : \'my-app\' , template : ` <div> <h1>{{title}}</h1> <div>Learn Angular6 with examples</div> </div> ` , } ) export class AppComponent { title : string = \'Welcome to Angular world\' ; }
⬆回到顶部
-
组件和指令之间有什么区别?
简而言之,一个组件(@component)是指令 – template。
一些主要差异以表格形式提及
成分 指示 要注册一个组件,我们使用@component Meta-data注释 要注册指令,我们使用@Directive Meta-data注释 组件通常用于创建UI小部件 指令用于将行为添加到现有的DOM元素中 组件用于将应用程序分解为较小的组件 指令用于设计可重复使用的组件 每个DOM元素只能存在一个组件 每个DOM元素都可以使用许多指令 @View Decorator或TemplateUrl/Template是强制性的 指令不使用视图
⬆回到顶部
-
什么是模板?
模板是HTML视图,您可以通过将控件绑定到角组件的属性来显示数据。您可以将组件的模板存储在两个地方之一。您可以使用Template属性对其进行内联定义,也可以在单独的HTML文件中定义模板,并使用@Component Deminator的TemplateUrl属性在组件元数据中链接到它。
使用模板语法使用内联模板,
import { Component } from \'@angular/core\' ; @ Component ( { selector : \'my-app\' , template : \' < div > < h1 > { { title } } < / h 1 > < div > Learn Angular < / d i v > < / div > \' } ) export class AppComponent { title : string = \'Hello World\' ; }
使用单独的模板文件,例如app.component.html
import { Component } from \'@angular/core\' ; @ Component ( { selector : \'my-app\' , templateUrl : \'app/app.component.html\' } ) export class AppComponent { title : string = \'Hello World\' ; }
⬆回到顶部
-
什么是模块?
模块是您应用程序中的逻辑边界,并且应用程序分为单独的模块以分开应用程序的功能。让我们以@ngmodule Decorator声明的app.module.ts root模块的示例,如下
import { NgModule } from \'@angular/core\' ; import { BrowserModule } from \'@angular/platform-browser\' ; import { AppComponent } from \'./app.component\' ; @ NgModule ( { imports : [ BrowserModule ] , declarations : [ AppComponent ] , bootstrap : [ AppComponent ] , providers : [ ] } ) export class AppModule { }
NGMODULE装饰器具有五个重要的(所有)选项:
- 导入选项用于导入其他因模块。默认情况下,对于任何基于Web的角度应用程序,默认情况下都需要BrowerModule。
- 声明选项用于在相应模块中定义组件。
- Bootstrap选项告诉Angular哪个组件在应用程序中引导。
- 提供者选项用于配置该模块注射器中可用的一组可注射对象。
- 输入程序选项是动态加载到视图中的一组组件。
⬆回到顶部
-
什么是生命周期挂钩?
Angular应用程序遍历整个过程,或者从其启动到应用程序结束的生命周期。图片表示中生命周期的表示如下,
每个生命周期方法的描述如下,
- ngonchanges:当数据绑定属性的值发生变化时,则调用此方法。
- NGONINIT:每当Angular首次显示数据结合属性后的指令/组件的初始化时,这就是称为这一点。
- NGDOCHECK:这是用于检测的,并且要对Angular无法或不会单独检测的变化行动。
- NGAFTERCONTENTINIT:在Angular将外部内容投影到组件视图之后,这是响应的。
- NGAFTERCONTENTENTENTECTED:在Angular检查投影到组件中的内容后,这是响应的。
- ngafterviewinit:在Angular初始化组件的观点和儿童视图之后,这是响应的。
- NGAFTERVIEWCHECKED:在Angular检查组件的视图和子女视图之后,这是响应的。
- Ngondestroy:这是Angular摧毁指令/组件之前的清理阶段。
⬆回到顶部
-
什么是数据绑定?
数据绑定是Angular中的核心概念,可以定义组件和DOM之间的通信,因此在不担心推动和提取数据的情况下定义交互式应用程序非常容易。数据结合的四种形式(分为3个类别)在数据流动的方式上有所不同。
-
从组件到DOM:
插值: {{value}}:从组件中添加属性的值
< li > Name: {{ user.name }} </ li > < li > Address: {{ user.address }} </ li >
属性绑定: [属性] =“值”:该值将从组件传递给指定属性或简单的HTML属性
< input type =\" email \" [value] =\" user.email \" >
-
从DOM到组件:事件绑定:(event)=“函数”:发生特定的DOM事件(例如:单击,更改,键),请在组件中调用指定方法
< button (click) =\" logout() \" > </ button >
-
双向绑定:双向数据绑定: [(ngmodel)] =“ value”:双向数据绑定允许双向数据流。例如,在下面的代码段中,电子邮件dom输入和组件电子邮件属性均已同步
< input type =\" email \" [(ngModel)] =\" user.email \" >
-
⬆回到顶部
-
什么是元数据?
元数据用于装饰类,以便可以配置类的预期行为。元数据由装饰器代表
-
班级装饰器,例如@component和@ngmodule
import { NgModule , Component } from \'@angular/core\' ; @ Component ( { selector : \'my-component\' , template : \'<div>Class decorator</div>\' , } ) export class MyComponent { constructor ( ) { console . log ( \'Hey I am a component!\' ) ; } } @ NgModule ( { imports : [ ] , declarations : [ ] , } ) export class MyModule { constructor ( ) { console . log ( \'Hey I am a module!\' ) ; } }
-
属性装饰器用于类内部的属性,例如@input和@output
import { Component , Input } from \'@angular/core\' ; @ Component ( { selector : \'my-component\' , template : \'<div>Property decorator</div>\' } ) export class MyComponent { @ Input ( ) title : string ; }
-
方法用于课程中的方法,例如@hostlistener
import { Component , HostListener } from \'@angular/core\' ; @ Component ( { selector : \'my-component\' , template : \'<div>Method decorator</div>\' } ) export class MyComponent { @ HostListener ( \'click\' , [ \'$event\' ] ) onHostClick ( event : Event ) { // clicked, `event` available } }
-
参数装饰器用于类构造函数内的参数,例如@inject,@optional
import { Component , Inject } from \'@angular/core\' ; import { MyService } from \'./my-service\' ; @ Component ( { selector : \'my-component\' , template : \'<div>Parameter decorator</div>\' } ) export class MyComponent { constructor ( @ Inject ( MyService ) myService ) { console . log ( myService ) ; // MyService } } // Angular v18 and above import { Component , inject } from \'@angular/core\' ; import { MyService } from \'./my-service\' ; @ Component ( { selector : \'my-component\' , template : \'<div>Parameter decorator</div>\' } ) export class MyComponent { myService : MyService = inject ( MyService ) constructor ( ) { console . log ( myService ) ; // MyService } }
-
班级装饰器,例如@component和@ngmodule
⬆回到顶部
-
什么是角CLI?
Angular CLI(命令行接口)是一个命令行接口,可以使用Nodejs样式(COMPORJS)模块构建脚手架和构建角应用程序。您需要使用低于NPM命令安装,
npm install @angular/cli@latest以下是少数命令的列表,在创建Angular项目时会很方便
-
创建新项目:新项目
-
生成组件,指令和服务: ng生成/g不同类型的命令将是,
- NG生成类my-new-class:将类添加到您的应用程序
- ng生成组件my-new-component:在应用程序中添加一个组件
- NG生成指令我的新指导:向您的应用程序添加指令
- ng生成枚举my-new-enum:向您的应用程序添加枚举
- NG生成模块my-new模块:向您的应用程序添加一个模块
- NG生成管道my-new-pipe:在您的应用程序中添加管道
- NG生成服务我的新服务:向您的应用程序添加服务
-
运行该项目: NG服务
-
⬆回到顶部
-
构造函数和ngoninit有什么区别?
构造函数是类实例化时执行的类的默认方法,并确保了类及其子类中字段的适当初始化。角度或更好的依赖性喷油器(DI)分析构造函数参数,并通过调用新的myClass()创建新实例时,它试图找到与构造函数参数类型相匹配的提供商,并将它们解析并传递给构造函数。
Ngoninit是Angular调用的生命周期钩,以表明Angular正在创建组件。
通常,我们将ngoninit用于所有初始化/声明,并避免在构造函数中工作。构造函数仅应用于初始化类成员,但不应进行实际的“工作”。因此,您应该使用constructor()来设置依赖注入,而不是其他。 ngoninit()是“启动”的更好的地方 – 这是解决组件绑定的地方。export class App implements OnInit { constructor ( private myService : MyService ) { //called first time before the ngOnInit() } ngOnInit ( ) { //called after the constructor and called after the first ngOnChanges() //e.g. http call... } }
⬆回到顶部
-
什么是服务?
当需要向各种模块提供通用功能时,使用服务。服务可以通过允许您从组件中提取共同的功能来更大地分离应用程序的关注点和更好的模块化。
让我们创建一个可用于跨组件的存储库,
import { Injectable } from \'@angular/core\' ; import { Http } from \'@angular/http\' ; @ Injectable ( { // The Injectable decorator is required for dependency injection to work // providedIn option registers the service with a specific NgModule providedIn : \'root\' , // This declares the service with the root app (AppModule) } ) export class RepoService { constructor ( private http : Http ) { } fetchAll ( ) { return this . http . get ( \'https://api.*gi*t*hub.com/repositories\' ) ; } }
以上服务使用HTTP服务作为依赖关系。
⬆回到顶部
-
什么是角度注入角度?
依赖注入(DI)是一个重要的应用设计模式,其中一类要求从外部来源寻求依赖性而不是创建它们本身。 Angular带有其自身的依赖注入框架来解决依赖关系(类或类执行其功能的服务或对象)。因此,您可以在整个应用程序中获得服务取决于其他服务。
⬆回到顶部
-
如何形成依赖性层次结构?
Angular中的注射器具有可以利用的规则,以实现应用程序中注射剂的所需可见性。通过了解这些规则,您可以确定应在哪种NGMODULE,组件或指令中声明提供商。
Angular有两个喷油器层次结构:
模块喷油器
当Angular启动时,它会创建一个将注册服务的根喷油器,这些注射是通过注射注释提供的。
ng-model属性中提供的所有服务称为提供商(如果这些模块没有懒惰)。递归递归遍历应用程序中使用的所有模型,并为根喷油器中提供的服务创建实例。如果您在急切的型号中提供了一些服务,则该服务将被添加到根喷油器中,这使其在整个应用程序中可用。
平台模块
在应用程序引导时,Angular创建了更多的喷油器,在root Imptor上方goe Platform Injextor上,该喷油器是由
main.ts文件中的平台浏览器动态函数创建的,并且它提供了一些平台特定的功能,例如DomSanitizer。nullinjector()
在最上面,层次结构中的下一个父型喷油器是
NullInjector()。除非您使用@optional(),否则该注射器的责任是丢弃错误,除非您使用@Optional(),因为最终,所有内容最终都会在NullInjector()中结束,并且它返回错误或返回@Optional(),null。元素注射器
Angular为每个DOM元素隐式创建
ElementInjector层次结构。正在为与Angular组件或任何应用指令的任何标签创建ElementInjector喷油器,并且您可以在提供商的属性内部的组件和指令注释中配置它,因此,它可以创建其自己的层次结构。
⬆回到顶部
-
异步管的目的是什么?
异步Pipe订阅了可观察的或承诺,并返回其发出的最新价值。当发出新值时,管道会标记要检查更改的组件。
让我们花一些时间可观察到,该时间在当前时间内每2秒钟不断更新视图。
@ Component ( {
selector : \'async-observable-pipe\' ,
template : `<div><code>observable|async</code>:
Time: {{ time | async }}</div>`
} )
export class AsyncObservablePipeComponent {
time : Observable < string <span cla
