$rootScope 定义全局函数 原理说明

文章参考 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);
	};

})

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值