在写generator-aio-angular的过程中,gulp这一块发现了很多非常实用的插件,大大的增加了能自动化的范围,这篇文章就分门别类的简单介绍下常用的gulp插件吧。
基于ui-router的简单布局及其他应用
Promise,其实我真的不懂你
写过Angular的service的孩子肯定对Promise不陌生了吧,这玩意的出现可以说是极大改变了异步编程的写法,告别了让代码不停横向发展的Callback Hell。一直以来自己都是按照网上流行的写法来写Promise的,并没有觉得有什么问题,直到看到这篇神一般的文章:We have a problem with promises,以及文中提到的Bluebird的Wiki中关于Promise的Anti-pattern,顿时有一种醍醐灌顶的感觉,敢情自己以前根本就没理解Promise啊。这篇文章就来讲讲最近在Promise上的心得体会。
重构你的gulpfile
前段时间在公司的新项目中尝试使用gulp替换grunt,体验非常棒!两者最大的区别就是grunt整个就像是一个配置文件,而gulp更像代码。这样的好处就是调试起来更方便直观。另外,利用Node.js的stream概念,让gulp的task看起来像管道一样,输入连着输出,输出又导入另一个输入,流程非常清晰易懂。自打用了这个,就再也不想回到闹心的grunt了。在用了一段时间后,问题来了:不知不觉gulpfile.js已经超过1000行了!每次要修改一个task就要费劲找半天,各种路径也是一团糟,非常难以维护了。那么,是时候重构gulpfile了!
一道有(bian)趣(tai)的CSS面试题
AngularJS中controller和service的继承与扩展
最近公司要做的项目中牵扯到很多场景需要对controller和service进行继承和扩展的,总结一下心得体会。开讲之前,先明确一下这里的所谓的“继承”与“扩展”。
- 所谓继承,比较熟悉,这里就是指定义一个新的controller/service(不同名),继承原来的controller/service,然后在其基础上重写一些功能。
- 所谓扩展,这里说的是在不产生新的controller/service的情况下,添加或修改原controller/service的功能。
目前研究的结果就是service可以轻松的实现继承和扩展,而controller貌似只能继承。
用$scope还是用controller as
AngularJS中在处理controller时提供了两种语法。
- 第一种是,在DOM中使用
ng-controller="TestController"
,这样在定义controller时需要将model绑定到$scope上。 - 另一种是,在DOM中使用
ng-controller="TestController as test"
,这样其实是将model直接绑定到controller的实例上。
在AngularJS的官方Get Started以及各种文档中,多推荐第一种方式,导致很多人可能都不知道原来还有第二种方式,我也是最近看一篇文章时才注意到这个。那么这两种方式各有什么优劣势呢?在现实的开发中到底更推荐哪种方式呢?今天就来探究一下!
AngularJS中scope基于原型链的继承
相信大家写过AngularJS的都会发现,很多人在处理表单的数据绑定时,都习惯性的把ng-model绑定在$scope的一个对象属性上,而不是直接绑定在scope上。比如说使用<input name="name" ng-model="data.name" />
而不是<input name="name" ng-model="name" />
。这是为什么呢?这样在controller里面岂不是写起来更复杂吗?每次访问的时候都要多“点”一下,为什么不直接绑在$scope上呢?其实这样写自然是有它的好处的,而且这种写法也是推荐的最佳实践,尤其是在处理嵌套scope的情形下,这样写是很有必要的。为了弄清楚这么写的原因,我们需要深入的研究一下AngularJS里scope的继承。