$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);
	};

})

猜你喜欢

转载自hbiao68.iteye.com/blog/2294722
今日推荐