用全局$rootScope存储数据的一些问题?
最近在做一个用angular框架写的一个管理平台项目,在对按钮的权限管理中,使用了$rootScope来存储权限数据,但发现个问题,就是在页面加载的时候,有时候页面会绑定不了权限的数据,但这种几率很小,但却会发生,让人摸不到头脑。
权限的获取数据是通过监听路由的变化来请求接口获取相应页面的权限数据,该是数据是绑定在$rootScope上的,在页面加载时都能获取到$rootScope下的权限数据,但却没有绑定在页面上,这个问题让我百思不能其解,于是我在网上查阅了各种关于作用域的问题,关于$rootScope和$scope的区别,它们之间就像是javaScript的原型链的关系,子作用域上没有找到该属性就向上一级父作用域上查询,但在这个问题上,明显页面上绑定$rootScope的该视图,由于某种原因可能是页面加载问题使得显示值为undefined。
于是我选择用$scope的方式赋值,于是我在子controller中获取$rootScope的btnPress的属性值,然后将其付给$scope绑定的一个变量下,但打印出来却是undfined,原来$rootScope下的btnPress是在主模块的作用域下赋值的,而在该模块的控制器作用域下,由于先后顺序问题,是不能访问的,因为该控制器下没有定义该属性,于是这个方法也行不同。
后来才知道,angular有个重要特性,就是依赖注入,通过service、factory、provider等方式将数据储存,然后注入到控制器中,然后绑定,因为这样做的好处是不仅简单明了,而且还能避免使用全局变量$rootScope的问题。