什么是作用域. 什么是控制器, 作用域包含了渲染视图时所需的功能和数据,它是所有视图的唯一源头。可以将作用域理解成试图模型(ViewModel). 作用域之间可以是包含关系也可以是独立关系.可以通过设置不同的ng-Controller来让$scope处于不同的作用域下面.

 一.$rootScope

1.1 $rootScope可以理解成全局变量,一旦赋值对整个module都有效.$rootScpoe不依赖于任何一个controller,  app.run是module被加载时候执行的代码. 可以理解成Silverlight MVVM里面的oninit方法.

<html>
<script src="angular.min.js"></script>
<script type="text/javascript">
var app = angular.module('myapp',[]);
app.run(function($rootScope){
$rootScope.message="hello frank!";
});
</script>
<head>
<div ng-app="myapp">
<h1>{{ message }}</h1>
</div>
</head>
<body>
</body>
</html>

1.2 AngularJS会优先获取Controller中$scope添加的值.

代码如下: 分别有三个{message}.  testControl2中在$scope中重新赋予了message值.

<html>
<script src="angular.min.js"></script>
<script type="text/javascript">
var app = angular.module('myapp',[]);
app.run(function($rootScope){
$rootScope.message="hello frank!";
}); app.controller('testControl1',function(){ }); app.controller('testControl2',function($scope){
$scope.message = "hello loch!";
}); </script>
<head>
<div ng-app="myapp">
{{ message }}
<div ng-controller="testControl1">
{{ message }}
</div>
<div ng-controller="testControl2">
{{ message }}
</div>
</div>
</head>
<body>
</body>
</html>

运行结果:  testControl2下的message被修改了.

hello frank!
hello frank!
hello loch!

  二. 控制器(ng-Controller)

ng-Controller氛围两种情况一种是包含,另一种是独立. 我们暂且叫做 父子关系和兄弟关系吧.

2.1 父子关系

2.1.1 代码如下:ChildController 包含在了ParentController里面, 两个button都对Count字段进行赋值。

<html>
<script src="angular.min.js"></script>
<script type="text/javascript">
var app = angular.module('myapp',[]); app.controller('ParentController',function($scope){
$scope.Count = ;
$scope.addParent = function(){
$scope.Count+=;
}
}); app.controller('ChildController',function($scope){
// $scope.Count = 1;
$scope.addChild = function(){
$scope.Count+=;
}
}); </script>
<head>
<div ng-app="myapp">
<div ng-controller="ParentController">
<span>{{ Count }}</span>
<button ng-click="addParent()">ParentClick</button>
<div ng-controller="ChildController">
<span> {{Count}} </span>
<button ng-click="addChild()">ChildClick</button>
</div>
</div>
</div>
</head>
<body>
</body>
</html>

2.1.2 运行结果:(在上面demo中,有一串被注释掉的代码,)

A 代码被注解: 当一开始点击ParentClick的时候两个Count一起增加, 然后点击ChildClick的时候只有ChildDiv的Count在增加,然后再回去点击ParentClick的时候,就只有ParentCount在自增

B.代码没被注解: 两者之间的自增都是独立分开的,互补关联.

2.1.3 总结:

因为在AngularJS中会默认先找当前Controller下的值,找不到再去找父类Controller值,如果还找不到就去找$rootScope的值, 对于A类情况在没点击ChildClick的时候,ChildController还没有设置Count的值,那么对应的{Count}只有先去取ParentController里面的$scope.count的值. 当点击了ChildClick后,ChildController中的$scope.count被创建,然后两个Controller就此开始独立.

2.2 兄弟关系.

运行结果: 两个Controller下的Count独立,自增互不影响.

<html>
<script src="angular.min.js"></script>
<script type="text/javascript">
var app = angular.module('myapp',[]); app.controller('BrotherOne',function($scope){
$scope.Count = ;
$scope.addParent = function(){
$scope.Count+=;
}
}); app.controller('BrotherTwo',function($scope){
$scope.Count = ;
$scope.addChild = function(){
$scope.Count+=;
}
}); </script>
<head>
<div ng-app="myapp">
<div ng-controller="BrotherOne">
<span>{{ Count }}</span>
<button ng-click="addParent()">ParentClick</button>
</div>
<div ng-controller="BrotherTwo">
<span> {{ Count }} </span>
<button ng-click="addChild()">ChildClick</button>
</div>
</div>
</head>
<body>
</body>
</html>

三. 本篇总结    

A.$rootScope == 全局变量
B.绑定的变量默认先从当前Controller的$scope去取

AngularJS笔记---作用域和控制器的更多相关文章

  1. AngularJS Scope(作用域)

    1. AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sc ...

  2. angualrjs学习总结二(作用域、控制器、过滤器)

    一:Scope简介 Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带.Scope 是一个对象,有可用的方法和属性.Scope 可应用在视图和控制器上. ...

  3. 理解angularJS中作用域$scope

    angularJS中作用域是什么 作用域(scope)是构成angularJS应用的核心基础,在整个框架中都被广泛使用,因此了解它如何工作是非常重要的 应用的作用域是和应用的数据模型相关联的,同时作用 ...

  4. AngularJS学习之旅—AngularJS Scope作用域(五)

    1.AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sco ...

  5. AngularJS讲义 - 作用域

    什么是作用域? Angular中作用域(scope)是模板以及工作的上下文环境,作用域中存放了应用模型和视图相关的回调行为.作用域是层次化结构的与相关联的DOM结构相对应.作用域可以观察表达式以及传播 ...

  6. 理解AngularJS的作用域Scope

    AngularJS中,子作用域一般都会通过JavaScript原型继承机制继承其父作用域的属性和方法.但有一个例外:在directive中使用scope: { ... },这种方式创建的作用域是一个独 ...

  7. AngularJS: 自定义指令与控制器数据交互

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 黄聪:AngularJS 动态加载控制器实例-ocLoazLazy

    一.AngularJS动态加载控制器和视图实例 路由配置关键代码: //二级页面 $stateProvider.state('main', { url: '/:name', /**如果需要动态加载数据 ...

  9. angularJs的作用域和依赖注入

    一.angularJs的作用域 &scope这是局部作用域,先在局部作用域中找,如果没有就在全局作用域中找  &rootScope这是全局作用域 <!DOCTYPE HTML&g ...

随机推荐

  1. C#使用iTextSharp给PDF添加水印

    代码: /// <summary> /// 添加普通偏转角度文字水印 /// </summary> public static void SetWatermark(string ...

  2. 基于<MediaElement>的WPF视频播放器(终章)【3】

    一.前言 对于<MediaElement>前两章介绍了差不多了,其实好的界面还需要UI工程师的配合,比如帮忙设计下按钮的样式等等.同样视频本身也需要吸引人,不然做的再好的播放器也没用.之后 ...

  3. android srudio使用HttpClient

    最近学习Android网络编程,在AndroidStudio下无法使用HttpClient,在网上找到了答案在这里记下来: //官方原文Apache HTTP Client RemovalAndroi ...

  4. C#中IList与List

    C#中IList<T>与List<T>的区别感想 写代码时对: IList IList11 =new List (); List List11 =new List (); 有所 ...

  5. 基于CkEditor实现.net在线开发之路(8)Vs开发怎么配置

    前段时间有一园友问我,怎么将组件放置到VS开发工具的工具箱中,用vs开发工具配合CKEditor实现在线.net开发呢? 第一步:登陆http://www.zjt-lab.com:8090/login ...

  6. 【夯实PHP基础】PHP的date函数

    本文地址 原文地址 提纲: 1. 引言 2. 代码示例 3. 参考资料 1. 引言 今天看到一段代码 $timeNew = date('n月j日', strtotime($oldTime)); 感觉有 ...

  7. Linq的分页与组合查询的配合使用

    1.首先使用Linq连接数据库,并扩展属性 public partial class User { public string SexStr { get { string end = "&l ...

  8. jquery定时滑出可最小化的底部提示层

    效果预览:http://keleyi.com/keleyi/phtml/jqtexiao/index.htm当打开页面或者刷新页面后等待两秒钟,会在底部滑出可最小化的提示层.滑出层半透明,可关闭再现. ...

  9. SVN版本控制系统学习(中文配置)

    先吐槽下往上搜索的一些SVN下载地址,里面乱七八糟啥都有,下载好后点击安装一不注意啥玩意都安装上了, 什么玩意都有,真心不明白这些推送者是怎么想的.搜集了一个WIN32的百度网盘下载地址: http: ...

  10. js基础知识梳理(最简版)

    基础的JavaScript知识,只放XMind截图.小白 JS01 JS02 JS03 最基础的js知识--!