ng $scope与$rootScope的关系

Posted 撒哈拉的雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ng $scope与$rootScope的关系相关的知识,希望对你有一定的参考价值。

$scope与$rootScope的关系:
①不同的控制器之间 是无法直接共享数据
②$scope是$rootScope的子作用域对象
$scope的id是随着控制器的加载顺序依次递增,$rootScope的id是1

③不同控制器之间如何通信??
1、借助于$rootScope
2、既然子作用域对象可以调用父作用域对象的值或者方法,就可以通过控制器之间的嵌套来实现通信
3、事件
父-》子
$scope.$broadcast(\'eventName\',args)

子-》父
$scope.$emit(\'eventName\',args)

绑定事件:
$scope.$on(\'eventName\',func)

 

 

效果:

 

代码:

<!DOCTYPE html>
<html ng-app="myApp">
<head lang="en">
  <meta charset="UTF-8">
  <script src="js/angular.js"></script>
  <title></title>
</head>
<body>

<div ng-controller="parentCtrl">
  <button ng-click="toChild()">
    向child传值
  </button>

  <div ng-controller="childCtrl">
    <p>{{data}}</p>
    <button ng-click="toParent()">向parent传值</button>
  </div>

</div>


<script>
  var app = angular.module(\'myApp\', [\'ng\']);

  app.controller(\'parentCtrl\', function ($scope) {
    $scope.toChild = function () {
      //通过事件传值 约定事件名称:toChildEvent
      $scope.$broadcast(
        \'toChildEvent\',
        \' msg from parent\')
    }

    //绑定toParentEvent事件的处理函数
    $scope.$on(\'toParentEvent\',
      function (event, result) {
        console.log(result);
      })

  });

  app.controller(\'childCtrl\', function ($scope) {
    //绑定事件 $on
    $scope.$on(\'toChildEvent\',
      function (event, result) {
        console.log(arguments);
        $scope.data = result;
      });

    $scope.toParent = function () {
      //向父级元素通过事件传值 $emit 约定:toParentEvent
      $scope.$emit(
        \'toParentEvent\',
        \'msg to my parent\'
      );
    }

  });

</script>
</body>
</html>

 

以上是关于ng $scope与$rootScope的关系的主要内容,如果未能解决你的问题,请参考以下文章

Angular之作用域

作用域

AngularJs学习笔记——scope

AngularJS-Scope作用域和控制器

AngularJS的作用域Scope

Angular JS 中 ng-controller 值复制和引用复制