1.factory、service 和 provider 是什么关系?
factory把 service 的方法和数据放在一个对象里,并返回这个对象
service通过构造函数方式创建 service,返回一个实例化对象
provider创建一个可通过 config 配置的 service,$get 中返回的,就是用 factory 创建 service 的内容
2.angular 的数据绑定采用什么机制?
脏检查机制。
双向数据绑定是 AngularJS 的核心机制之一。当 view 中有任何数据变化时,会更新到 model ,当 model 中数据有变化时,view 也会同步更新,显然,这需要一个监控。
原理就是,Angular 在 scope 模型上设置了一个 监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往$watch队列里插入一条$watch,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular context 处理的事件时,$digest循环就会触发,遍历所有的$watch,最后更新 dom。
3.angular 的缺点有哪些?
强约束,对前端不友好。
不利于 SEO
因为所有内容都是动态获取并渲染生成的,搜索引擎没法爬取。
一种解决办法是,对于正常用户的访问,服务器响应 AngularJS 应用的内容;对于搜索引擎的访问,则响应专门针对 SEO 的HTML页面。
性能问题
作为 MVVM 框架,因为实现了数据的双向绑定,对于大数组、复杂对象会存在性能问题。
可以用来优化angular性能的办法:
减少监控项(比如对不会变化的数据采用单向绑定)
主动设置索引(指定track by,简单类型默认用自身当索引,对象默认使用$$hashKey,比如改为track by item.id)
降低渲染数据量(比如分页,或者每次取一小部分数据,根据需要再取)
数据扁平化(比如对于树状结构,使用扁平化结构,构建一个 map 和树状数据,对树操作时,由于跟扁平数据同一引用,树状数据变更会同步到原始的扁平数据)
4.angular 的 “依赖注入”
依赖注入是一种软件设计模式,目的是处理代码之间的依赖关系,减少组件间的耦合。
5.关于同步、异步?
同步的操作如下:浏览器首先发送第一个请求,等待服务器回复后,再发送第二个请求,依次类推,直到所有请求完成。异步的操作如下:浏览器发送第一个请求,可以不用等待服务器返回,可以继续发送第二个请求。
6.行元素和块元素
块级元素具有以下特点:【display:block】
1、块级元素会独占一行,默认情况下,其宽度自动填满其父元素宽度,与内容无关
2、宽度、高度、行高以及外边距和内边距都可控制
3、块级元素可以设置margin和padding属性
4、它可以容纳内联元素和其他块元素
行内元素的特点:【dispaly:inline】
1、行内元素不会独占一行,相邻的行内元素会排列在同一行里,直到一行排不下,才会换行,其宽度随元素的内容而变化.
2、宽度、高度、行高及外边距和内边距部分可改变
3、行内元素的margin和padding属性,水平方向的
padding-left,padding-right,margin-left,margin-right
都产生边距效果,但竖直方向的padding-top,padding-bottom,margin-top,margin-bottom却不会产生边距效果.
4、行内元素只能容纳文本或者其他行内元素,不可以设置宽高,其宽度随着内容增加,高度随字体大小而改变,内联元素可以设置外边界,但是外边界不对上下起作用,只能对左右起作用,也可以设置内边界,但是内边界在IE6中不对上下起作用,只能对左右起作用