首先引入 angular 的根作用域:$rootScope

ng-app:定义了angualr的作用域

ng-controller:定义了控制器

$scope定义了视图与控制器之间的纽带,而scope本身是垂直继承的,当子作用域没有定义,便会找父作用域,逐层往上找直到根作用域 $rootScope.

没有定义控制器的元素对应的即是根作用域,如下(<div>{{msg}}</div>)

看下面代码,当我们点击parent控制器时,发现其子控制器内容会跟着变化,而父控制器以及根作用域绑定的元素内容没有变化(msg默认在各作用域都没有定义,因此继承根作用域的msg="Hello KiTy"):

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>test</title>
</head>
<body ng-app = "myApp">
<div>{{msg}}</div>
<div ng-controller="parent" ng-click="change()">{{msg}}
<div ng-controller="child">{{msg}}</div>
<div ng-controller="child1" ng-click="change1()">{{msg}}</div>
<div ng-controller="child2">{{msg}}</div>
</div>
<script src="angular.js"></script>
<script> var app = angular.module('myApp', []);
app.run(function($rootScope){          //run方法根作用域$rootScope的方法,因其没有控制器,不能用controller方法
var msg = "Hello KiTy"
$rootScope.msg = msg;
})
app.controller("parent", function($scope){
$scope.change = function(){
$scope.msg = "lol";
}
})
app.controller("child", function($scope){ })
app.controller("child1", function($scope){ })
app.controller("child2", function($scope){ })
</script>
</body>
</html>

由上不难发现scope是垂直继承,且是单向由上当下的,即父作用域不会继承子作用域数据绑定的值

若想通过子作用域传递其数据到父作用域可以在子控制器函数中加以下代码:

方法一:

 app.controller("parent", function($scope,$rootScope){
console.log($scope)
$scope.change = function(){
$rootScope.msg = "lol";
}
})

方法二:

 app.controller("parent", function($scope){
console.log($scope)
$scope.change = function(){
$scope.$parent.msg = "lol";
}
})

那么找个$parent怎么来的?答案:console.log($scope);控制台输出$scope后找到的,意为其父作用域

当然了我们还发现了兄弟作用域$$prevSibling、$$nextSibling,可以通过这两项来改变兄弟作用域内数据,意为前一个兄弟、后一个兄弟

代码:

 app.controller("child1", function($scope){
console.log($scope);
$scope.change1 = function(){
$scope.$$prevSibling.msg = "lol";
         $scope.$$nextSibling.msg = "lol";
}
})

通过以上分析我们发现作用域层级关系就像DOM树型机构,一 一对应,有根作用域 $rootScope,子作用域 $scope ,每一个子作用域有其兄弟作用域

可通过 $parent; $$prevsibling; $$nextSibling 向其父作用域以及兄弟作用域传递数据。(若子作用域默认有数据绑定,则不会受其他作用域影响)

Angular作用域的层级概念(scope)的更多相关文章

  1. angular源码分析:angular中$rootscope的实现——scope的一生

    在angular中,$scope是一个关键的服务,可以被注入到controller中,注入其他服务却只能是$rootscope.scope是一个概念,是一个类,而$rootscope和被注入到cont ...

  2. angular controller as syntax vs scope

    今天要和大家分享的是angular从1.2版本开始带来了新语法Controller as.再次之前我们对于angular在view上的绑定都必须使用直接的scope对象,对于controller来说我 ...

  3. 从零开始讲解JavaScript中作用域链的概念及用途

    从零开始讲解JavaScript中作用域链的概念及用途 引言 正文 一.执行环境 二.作用域链 三.块级作用域 四.其他情况 五.总结 结束语 引言 先点赞,再看博客,顺手可以点个关注. 微信公众号搜 ...

  4. Angular——作用域

    基本介绍 应用App是无法嵌套的,但是controller是可以嵌套的,每个controller都会对应一个模型(model)也就是$scope对象,不同层级的controller下的$scope遍产 ...

  5. angular作用域分析

    angualr作用域 Scope 控制器作用域的继承特性Ⅰ 绑定的数据是变量 单向隔离(兄弟之间互不影响,父子之间单向继承) 父级控制器的数据绑定会影响到子级控制器 前提是子控制器内没有绑定数据 单向 ...

  6. Python基础-作用域和命名空间(Scope and Namespace)

    在Python中,对象是独立的,不同作用域中的不同名字都可以被绑定在同一个对象上,当然对这个对象的修改会影响所有的引用.赋值操作就是名字和对象的绑定或重绑定.这和C++中的引用是一样的. 1,基础概念 ...

  7. angular学习(三)-- $scope

    1.3 视图数据模型:$scope $scope 是用来视图和数据之间的胶水.粘合剂 视图和控制器之间的数据桥梁 用于在视图和控制器之间传递数据 用来暴露数据模型(数据.行为) 监视模型数据的变化,做 ...

  8. angular.js学习笔记--概念总结

    好久没更新了,现在开始学习学习angularjs,并且把学习到的一些知识总结记录一下,方便以后查找以及希望能给初学者一些帮助!(由于本人也是初学ng所以各位慎重理解!) 废话不多说,开始! $root ...

  9. 2 Angular 2 的核心概念

    一.组件(Components): 组件是构成 Angular 应用的基础和核心,它是一个模板的控制类,用于处理应用和逻辑页面的视图部分.组件知道如何渲染自己及配置依赖注入,并通过一些由属性和方法组成 ...

随机推荐

  1. PacificA中的租约与失效检测解读

    PacificA是微软的在基于log的分布式存储系统中的复制技术. 由于配置管理器维护着当前配置的真实情况,因此主节点不必保持不变. 这是因为配置的本地视图在不同服务器上是不必同步的. 特别是,我们必 ...

  2. 安装mysql后的基本配置

    1.添加环境变量 右键 此电脑->属性->高级系统设置->环境变量,在系统变量里面找到Path,双击.点击编辑,将mysql中bin文件的路径添加到最后一行,如:F:\AppSev\ ...

  3. 大数据系统之监控系统(二)Flume的扩展

    一些需求是原生Flume无法满足的,因此,基于开源的Flume我们增加了许多功能. EventDeserializer的缺陷 Flume的每一个source对应的deserializer必须实现接口E ...

  4. OAF通过Iterator标准遍历各行

    这两天本人接到客户反映的bug:oaf的采购订单页面,在添加超过10行提交后,会出现空指针异常.原来,oaf的默认显示行数为10行,超过10行,页面会分页.报空指针异常,就是因为没有取到分页的行.之前 ...

  5. 如何创建一个GitLab Web Hooks?

    Git Hooks Git 能在特定的重要动作发生时触发自定义的脚本. 这些脚本都被存储在 Git 目录下的 hooks 子目录中(.git/hooks).当 git init 初始化一个仓库时,Gi ...

  6. GIT/node使用

    一. 为不同域名的库自动保存不同的用户名和密码 比如 公司的库是 http://source.sohu.com,另一个是 http://www.github.com,命令行中分别两个命令就搞定了 gi ...

  7. eclipse svn分支与合并操作

    以前做项目的时候没有用过svn的分支合并操作,今天用到了,刚开始还真不会啊.最后查了下就是这么的方便.专门记录下来. 原文来自:http://blog.csdn.net/lisq037/article ...

  8. HashMap实现原理分析(转)

    文章转自:http://blog.csdn.net/vking_wang/article/details/14166593 1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但 ...

  9. pacemaker+corosync/heartbeat对比及资源代理RA脚本

    一.Pacemaker概念 (1)Pacemaker(心脏起搏器),是一个高可用的群集资源管理器.它实现最大可用性资源管理的节点和资源级故障检测和恢复,通过使用首选集群基础设施(Corosync或He ...

  10. java设计模式之备忘录模式

    备忘录模式 备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.一听到备忘录这个字的时候想起了小小时打的游 ...