Angular 面试题

ng-if跟ng-show/hide的区别有哪些?

  • 1.ng-if在表达式为true的时候才创建DOM节点,ng-show是初始化时就创建用display:none与display:block来控制显示和不显示
  • 2.ng-if会(隐式的)产生新作用域,ng-switch、ng-include等会动态创建一块界面的也是如此,这样会导致ng-if用基本变量绑定ng-model不会进行双向绑定,因为此时已经是两个变量了
  • 3.ng-if是控制DOM节点的增加、删除实现的

ng-repeat重复数组时有相同值

  • 用track by $index来解决

filter过滤器

  • date 日期
  • currency 货币
  • limitTo 限制数组或字符串长度
  • orderBy 排序
  • lowercase 小写
  • uppercase 大写
  • number 格式化数字
  • filter 处理一个数组 过滤含有某个字符串的元素
  • json 格式化Json对象
  • filter有两种使用方法,
  • 1.在页面里
  • 2.在js里 $filter

自定义服务的几种方式

  • $factory:把service的方法和数据放到创建的一个对象里,并且返回这个对象
  • $service:通过构造函数new创建出来service 返回一个实例化对象,this指向不一样
  • $provider:可以传进.config()函数的service,当想要在service对象启用之前,先进性模块范围的配置,应该用provider

angular双向数据绑定机制

  • 脏检查机制
  • 当处理事件时 触发$digest流程 从rootscope开始循环遍历,检查所有$watch进行数据更新
  • $digest循环的上限是10次(超出后抛出异常)
  • click事件产生一次更新的操作(至少触发两次$digest循环)

angular模块(组件)之间的通信

  • 第一种是借助父 controller。在子 controller 中向父 controller 触发( $emit )一个事件,然后在父 controller 中监听( $on )事件,再广播( $broadcast )给子 controller ,这样通过事件携带的参数,实现了数据经过父 controller,在同级 controller 之间传播。
  • 2.service
  • 3.$rootScope

angular 应用常用哪些路由库,各自的区别是什么?

  • ng-Route 、ui-Router
  • ng-Route是angular自带路由模块
  • ui-router 是基于ng-route开发的第三方模块
  • ui.router 是基于 state (状态)的
  • ngRoute 是基于 url 的
  • ui.router模块具有更强大的功能,主要体现在视图的嵌套方面。
  • 使用 ui.router 能够定义有明确父子关系的路由,并通过 ui-view 指令将子路由模版插入到父路由模板的
    中去,从而实现视图嵌套。而在 ngRoute 中不能这样定义,如果同时在父子视图中 使用了
    会陷入死循环。

- 详述 angular 的 “依赖注入”

  • 赖注入是一种软件设计模式,目的是处理代码之间的依赖关系,减少组件间的耦合。
  • 原理:AngularJS是通过构造函数的参数名字来推断依赖服务名称的,通过 toString() 来找到这个定义的 function 对应的字符串,然后用正则解析出其中的参数(依赖项),再去依赖映射中取到对应的依赖,实例化之后传入。

解释下什么是$rootScrope以及和$scope的区别?

  • 俗的说$rootScrope 页面所有$scope的父亲。

Angular Directive中restrict 中分别可以怎样设置?scope中@,=,&有什么区别?

  • ECMA
  • 在scope中,@,=,&在进行值绑定时分别表示
  • @获取一个设置的字符串,它可以自己设置的也可以使用{{yourModel}}进行绑定的;
  • = 双向绑定,绑定scope上的一些属性;
  • & 用于执行父级scope上的一些表达式,常见我们设置一些需要执行的函数

优化 Angular 应用的性能

  • 减少监控项(比如对不会变化的数据采用单向绑定)
  • 主动设置索引(指定 track by,简单类型默认用自身当索引,对象默认使用 $$hashKey,比如改为 track by item.id)
  • 降低渲染数据量(比如分页,或者每次取一小部分数据,根据需要再取)
  • 数据扁平化(比如对于树状结构,使用扁平化结构,构建一个 map 和树状数据,对树操作时,由于跟扁平数据同一引用,树状数据变更会同步到原始的扁平数据)

你可能感兴趣的:(Angular 面试题)