作为最流行的MVVM(Model-View-View-Model)框架之一,相信大部分前端对AngularJS都不会陌生,我也一样久仰大名。不得不说,AngularJS所带来的改变是巨大的,被称为未来浏览器的模式一点也不为过,尤其是思维上的转变。
作为一个常年挥舞着jQuery去指挥无穷无尽的DOM的前端,初次接触AngularJS是有困难的,许多先贤警告我们不要在AngularJS中使用jQuery,不是没有道理的。即使AngularJS中带有jQlite对象,也仅仅是为了弥补一些地方AngularJS的局限性。AngularJS操作UI的方式与jQuery有着极大区别,在深入学习之后,我渐渐的发现了这点。过去使用jQuery的
继续阅读 »
从去年春天就开始翻译这本《Pro AngularJS》,前前后后将近1年半总算是正式出版。从最初的兴奋,到期间的苦逼,最后拿到样书,还是很满足的。这本书由浅入深的详细介绍了AngularJS的各种功能和原理,以及大量示例贯穿全书,开头甚至还有一些JavaScript的基础。原书一共600多页,我和同事各翻译了300多页,我主要是翻译的关于Services的第三部分以及第一部分的后几章。
总的来说收获很多,对AngularJS有了更深入的理解,虽然书中使用的AngularJS版本已经比较旧了,但是对很多方法的使用以及原理的解读还是非常不错的。并且英语阅读能力也感到有明显提升,许多长句子一开始完全不知所云,花了好几个小时通过上下文和代
继续阅读 »
相信大家写过AngularJS的都会发现,很多人在处理表单的数据绑定时,都习惯性的把ng-model绑定在$scope的一个对象属性上,而不是直接绑定在scope上。比如说使用而不是。这是为什么呢?这样在controller里面岂不是写起来更复杂吗?每次访问的时候都要多“点”一下,为什么不直接绑在$scope上呢?其实这样写自然是有它的好处的,而且这种写法也是推荐的最佳实践,尤其是在处理嵌套scope的情形下,这样写是很有必要的。为了弄清楚这么写的原因,我们需要深入的研究一下AngularJS里scope的继承。
more
基于原型链的继承
AngularJS的官方文档里有这么一句话来描述scope:A "child scope
继续阅读 »
本系列文章的分析基于AngularJS v1.4.2.
参考资料有:
AngularJS API Docs
AngularJS Developer Guide
AngularJS实战
Service vs provider vs factory
继续阅读 »
原文链接:Make Your Own AngularJS, Part 1: Scopes And Digest
Angular 是一个成熟和功能强大的 JavaScript 框架,也是一个庞大的框架,要正真有效地使用它,需要掌握许多新概念。在 Web 开发人员涌向 Angular 的同时,许多人都面临着同样的疑问:Digest 到底是做什么的?可以有哪些不同的方式来定义一个指令(directive)?service 和 provider 之间有些什么区别?
Angular官方文档是非常好的学习资源,并且还有越来越多的第三方资源,不过,想要深入了解一个新的框架,没有比分解它,然后研究其内部运作原理更加有效。
在本系列文章中,
继续阅读 »
在使用AngularJS的时候,可能需要创建各种各样的服务,这个时候,需要告诉AngularJS如何创建这些服务,这便是Provider。在实际使用的时候,会有provider,factory,service,value,constant,事实上,它们都是Provider,从factory到constant,只不过是对provider的一步步封装。相关源码都在函数createInjector中。
继续阅读 »
所谓继承,比较熟悉,这里就是指定义一个新的controller/service(不同名),继承原来的controller/service,然后在其基础上重写一些功能。
所谓扩展,这里说的是在不产生新的controller/service的情况下,添加或修改原controller/service的功能。
目前研究的结果就是service可以轻松的实现继承和扩展,而controller貌似只能继承。
more
controller的继承
说到controller,我们在前面的文章中介绍过有两种写法:使用$scope或使用controller as。针对这两种方式的区别,我们也可以使用两种不同的继承方式:
* 使用controll
继续阅读 »
在AngularJS模块化和依赖注入的基础上,来分析模块加载的详细过程。以如下代码为例:
html
angular.module('MyModule', [])
.controller('ctrl', ['$scope', function($scope) {}]);
继续阅读 »
参考资料:
Creating Custom Directives
HTML Compiler
$compile
angularjs1.3.0源码解析之directive
继续阅读 »
AngularJS的一个强大之处就在于依赖注入。在调用bootstrap的时候,会调用createInjector来创建一个注射器进行注入。该方法的代码简化如下:
```javascript
function createInjector(modulesToLoad, strictDi) {
strictDi = (strictDi === true);
var INSTANTIATING = {},
providerSuffix = 'Provider',
path = [],
loadedModules = new HashMap([], true),
继续阅读 »