浅谈AngularJS--域变量(scope)

1、引述

作为一个现代Javescript的流行框架,AngularJS已经被很多人使用。对于刚入门的或者一部分放弃使用这个框架的人,我感觉会在scope这个概念上遇到了不小的困难。
就我自身亲身经历而言,scope着实让我在项目使用中,费了很大劲。这很大程度上是由于概念本身的多样化和使用的面太广造成的。


2、言归正传

什么是scope?

简单来讲,scope是AngularJS中的作用域对象,是我们使用AngularJS时,常打交道的一个内置对象。scope是一个局部变量,在不同作用域中,有着不同的值。


在哪会出现scope变量?

存在作用域的地方就会创建一个scope变量,最让人挠头的地方到了,AngularJS中什么情况下会单独划分作用域?我们开始使用时可能会以为只有controller会划分单独的作用域,原因很简单,我们一般创建一个controller后,在下面的子节点使用时,可以直接使用其上的变量,但是这其实是AngularJS的scope继承的结果。
其实除了controller,某些directive也会创建scope,这个scope可以选择性的继承父scope的某些属性,或者作为一个 isolated scope。而且修改原型继承来的父scope属性时需要注意,直接修改基本类型(数字、字符串、bool等),父scope不会发生变化,因为基本类型在原型继承中是值传递的(而非传引用)。


另外

多个scope间的值传递,非常不建议用诸如$parent,$sibling等方式直接访问、取值、修改,推荐采用service做跨scope传值,一来保证代码的结构清晰,二来也是方便复用。 除此之外,每个scope中还会包含一些AngularJS 底层函数,例如我们较为常用的 $apply,$watch等。这些方法的使用请自行google。


结语

scope是AngularJS中的核心概念,值得每位希望深入学习AngularJS的同学研究。 另外一个AngularJS中的核心知识,我认为是它的双向数据绑定机制,我们所看到的仅仅是表象,有想学习的同学建议看看AngularJS 源代码,关于$apply,$digest 以及 指令集ng-model的实现,会对深入了解这部分很有帮助。(另外强赞一下AngularJS的源代码注释,看后觉得自己的注释弱爆了)


你可能感兴趣的:(技术,前端,AngularJS)