1简述angularjs的优缺点?
优点:
1.模板功能强大丰富,并且是声明式的,自带了丰富的Angular指令;
2.是一个比较完善的前端MV*框架,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能;
3.自定义Directive,比jQuery插件还灵活,但是需要深入了解Directive的一些特性,简单的封装容易,复杂一点官方没有提供详细的介绍文档,我们可以通过阅读源代码来找到某些我们需要的东西,如:在directive使用 $parse;
4.ng模块化比较大胆的引入了Java的一些东西(依赖注入),能够很容易的写出可复用的代码,对于敏捷开发的团队来说非常有帮助,我们的项目从上线到目前,UI变化很大,在摸索中迭代产品,但是js的代码基本上很少改动。
5. 补充:Angular支持单元测试和e2e-testing。
缺点:
1.验证功能错误信息显示比较薄弱,需要写很多模板标签,没有jQuery Validate方便,所以我们自己封装了验证的错误信息提示,详细参考why520crazy/w5c-validator-angular · GitHub;
2.ngView只能有一个,不能嵌套多个视图,虽然有angular-ui/ui-router · GitHub解决,但是貌似ui-router 对于URL的控制不是很灵活,必须是嵌套式的(也许我没有深入了解或者新版本有改进);
3. 对于特别复杂的应用场景,貌似性能有点问题,特别是在Windows下使用chrome浏览器,不知道是内存泄漏了还是什么其他问题,没有找到好的解决方案,奇怪的是在IE10下反而很快,对此还在观察中;
4. 这次从1.0.X升级到1.2.X,貌似有比较大的调整,没有完美兼容低版本,升级之后可能会导致一个兼容性的BUG,具体详细信息参考官方文档AngularJS,对应的中文版本:Angular 1.0到1.2 迁移指南
5. ng提倡在控制器里面不要有操作DOM的代码,对于一些jQuery 插件的使用,如果想不破坏代码的整洁性,需要写一些directive去封装插件,但是现在有很多插件的版本已经支持Angular了,如:jQuery File Upload Demo
6.Angular 太笨重了,没有让用户选择一个轻量级的版本,当然1.2.X后,Angular也在做一些更改,比如把route,animate等模块独立出去,让用户自己去选择。
7:内容网站,需要SEO的。(SEO目前也有了prerender解决方案) https//prerender.io
8:交互频繁的,如游戏之类交互体验网站。
9,太过于简单的页面。
2、angularjs 适合做哪些业务场景?谈谈你的理解(公司面试)
1网页界面交互特别多的时候,比如各种管理后台界面(大量表单和输入输出交互),一整坨数据丢给网页,交互全部在网页上搞定,然后又是一整坨丢给后台,不用考虑谁渲染谁判断的问题。
2以及电商系统的订单确认界面(多种条件才能确定显示谁不显示谁还有下一步如何交互什么的)
3内网管理系统,一堆表单,然后各种根据条件显示隐藏控件的,ngModel ngShow不要太爽
谈谈你对promise对象的理解
一个Promise 对象可以理解为一次将要执行的操作(常常被用于异步操作),使用了 Promise 对象之后可以用一种链式调用的方式来组织代码,让代码更加直观。而且由于Promise.all这样的方法存在,可以让同时执行多个操作变得简单。接下来就来简单介绍Promise 对象。
resolve 和 reject
首先来看一段使用了Promise 对象的代码。
functionhelloWorld(ready){
returnnewPromise(function(resolve, reject){
if(ready) {
resolve("Hello World!");
}else{
reject("Good bye!");
}
});
}
helloWorld(true).then(function(message){
alert(message);
},function(error){
alert(error);
});
上面的代码实现的功能非常简单,helloWord函数接受一个参数,如果为true就打印"Hello World!",如果为false就打印错误的信息。helloWord函数返回的是一个Promise 对象。
在Promise 对象当中有两个重要方法————resolve和reject。
resolve方法可以使Promise 对象的状态改变成成功,同时传递一个参数用于后续成功后的操作,在这个例子当中就是Hello World!字符串。
reject方法则是将Promise 对象的状态改变为失败,同时将错误的信息传递到后续错误处理的操作。
Promise 的三种状态
上面提到了resolve和reject可以改变Promise 对象的状态,那么它究竟有哪些状态呢?
Promise 对象有三种状态:
Fulfilled 可以理解为成功的状态
Rejected 可以理解为失败的状态
Pending 既不是 Fulfilld 也不是 Rejected 的状态,可以理解为 Promise 对象实例创建时候的初始状态
helloWorld 的例子中的then方法就是根据Promise 对象的状态来确定执行的操作,resolve 时执行第一个函数(onFulfilled),reject 时执行第二个函数(onRejected)。