面试题-angular
angular数据绑定原理
单向绑定
属性绑定:在单一方向上将值从组件的属性送到目标元素的属性。
插值绑定:将在相应的组件模板中显示变量的值。
通过插值,你可以动态更改应用视图中显示的内容,使用双花括号{{}}作为定界符Currentcustomer:{{currentCustomer}}
事件绑定:用户操作触发DOM事件,可以侦听并响应用户操作,例如按键、鼠标移动、点击和触摸
双向绑定
双向绑定为应用中的组件提供了一种共享数据的方式。
使用双向绑定绑定来侦听事件并在父组件和子组件之间同步更新值。
Angular的双向绑定语法是方括号和圆括号的组合,[]进行属性绑定,()进行事件绑定
比如:
nz-zorro很多组件使用ngModel,使用双向绑定的话,值就同步更新了,就不需要
再写事件绑定去接受子组件传过来的值了
forRoot()方法是什么?
静态方法 forRoot() 是一个约定,可以更轻松的配置模块的想要单例使用的服务及其提供者。 RouterModule.forRoot() 就是一个很好的例子。应用把一个 Routes 对象传给 RouterModule.forRoot(),为的就是使用路由配置全应用级的 Router 服务。 RouterModule.forRoot() 返回一个ModuleWithProviders对象。 你把这个结果添加到根模块 AppModule 的 imports 列表中。 只能在应用的根模块 AppModule 中调用并导入 forRoot() 的结果。 在其它模块,特别是惰性加载模块中,不要导入它。通常,你只需要用 providedIn 提供服务,用 forRoot()/forChild() 提供路由即可 如果模块同时定义了 providers(服务)和 declarations(组件、指令、管道),那么,当你同时在多个特性模块中加载此模块时,这些服务就会被注册在多个地方。 这会导致出现多个服务实例,并且该服务的行为不再像单例一样。
有多种方式来防止这种现象: 用 providedIn 语法代替在模块中注册服务的方式。 把你的服务分离到它们自己的模块中。 在模块中分别定义 forRoot() 和 forChild() 方法