文章参考 http://zhidao.baidu.com/link?url=CMMnNfIilErFG5vVIZYHSepjU2Rfs6Y79G5YFx1cPQTTp83c8vrqTFpkyJmSKsQWIAYS7F_iDVn610t33TPQKndCISCdH7jgE85UVbz73Ui
scope是angularJS中的作用域(其实就是存储数据的地方),很类似javascript的原型链 。搜索的时候,优先找自己的scope,如果没有找到就沿着作用域链向上搜索,直至到达根作用域rootScope。
$rootScope是由angularJS加载模块的时候自动创建的,每个模块只会有1个rootScope。rootScope创建好会以服务的形式加入到 $injector中。也就是说通过 $injector.get("$ rootScope ");能够获取到某个模块的根作用域。更准确的来说,$rootScope是由angularJS的核心模块ng创建的。
scope是html和单个controller之间的桥梁,数据绑定就靠他了。rootscope是各个controller中scope的桥梁。用rootscope定义的值,可以在各个controller中使用
原理:利用$rootScope注册一个事件,然后利用事件的传递,最终被$rootScope捕获,这样可以定义一个全局函数,方便在各个controller中使用。
例如ui-router页面切换
angular.module("jiazhengApp").config(function ($stateProvider, $ionicConfigProvider) { //禁用所有缓存 $ionicConfigProvider.views.maxCache(0); $stateProvider //家政服务包的导航首页 .state('jiazhengIndex', { url: '/jiazheng/index', templateUrl: 'template/jiazheng/jiazhengIndexContent.html', //ui-router的控制器引用其他service的方法,参数$state只能在$scope后面,否则会报错 controller: "jiazhengIndexController" }) }) .run(function($rootScope,$state,xiaoquService){ //定义一个全局函数,跳转到指定的页面 $rootScope.goTo = function(urlState){ //如果跳转到页面是选择小区,则记录当前页面,方便回退 if(urlState == 'jiazhengXiaoqu'){ var stateName = $state.current.name; xiaoquService.backUrl = stateName; } $state.go(urlState); }; })