AngularJS笔记---作用域和控制器
什么是作用域. 什么是控制器, 作用域包含了渲染视图时所需的功能和数据,它是所有视图的唯一源头。可以将作用域理解成试图模型(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笔记---作用域和控制器的更多相关文章
- AngularJS Scope(作用域)
1. AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sc ...
- angualrjs学习总结二(作用域、控制器、过滤器)
一:Scope简介 Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带.Scope 是一个对象,有可用的方法和属性.Scope 可应用在视图和控制器上. ...
- 理解angularJS中作用域$scope
angularJS中作用域是什么 作用域(scope)是构成angularJS应用的核心基础,在整个框架中都被广泛使用,因此了解它如何工作是非常重要的 应用的作用域是和应用的数据模型相关联的,同时作用 ...
- AngularJS学习之旅—AngularJS Scope作用域(五)
1.AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sco ...
- AngularJS讲义 - 作用域
什么是作用域? Angular中作用域(scope)是模板以及工作的上下文环境,作用域中存放了应用模型和视图相关的回调行为.作用域是层次化结构的与相关联的DOM结构相对应.作用域可以观察表达式以及传播 ...
- 理解AngularJS的作用域Scope
AngularJS中,子作用域一般都会通过JavaScript原型继承机制继承其父作用域的属性和方法.但有一个例外:在directive中使用scope: { ... },这种方式创建的作用域是一个独 ...
- AngularJS: 自定义指令与控制器数据交互
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 黄聪:AngularJS 动态加载控制器实例-ocLoazLazy
一.AngularJS动态加载控制器和视图实例 路由配置关键代码: //二级页面 $stateProvider.state('main', { url: '/:name', /**如果需要动态加载数据 ...
- angularJs的作用域和依赖注入
一.angularJs的作用域 &scope这是局部作用域,先在局部作用域中找,如果没有就在全局作用域中找 &rootScope这是全局作用域 <!DOCTYPE HTML&g ...
随机推荐
- PetaPoco利用ODP.NET Managed Driver连接Oracle
大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦.调试好环境后,一直到项目结束都不敢重装系统.最近又有一个需求需要读取oracle,可 ...
- Python 3.4 Library setup
matplotlib: https://pypi.python.org/pypi/matplotlib/1.4.3 Unofficial Windows Binaries for Python Ex ...
- discuz X3.1 关于分表 和 分表数据迁移
// *********** 关于读取分表的数据*********** { // forum_thread 分表代码片段 -- 帖子列表 { // 定位某个板块的帖子落在哪个表(forum_threa ...
- CSS3学习总结
(写在前边~)过了这么长时间,才写博客,最近实在是太忙了,做了两个项目,一个项目用于练手,自我感觉做的很漂亮,一个项目是一套完整的页面体系,答辩时候老师给了100分和99分,并让我打包上传,我很是感动 ...
- sql执行循序
(8) select (9) distinct (11) top 1 (6) Table1.id,COUNT(Table1.name) as nameCount (1) from Table1 (3) ...
- spring入门(七)【springMVC返回json串】
现在多数的应用为了提高交互性多使用异步刷新,即在不刷新整个页面的情况下,只刷新局部,局部刷新用得最多就是ajax,ajax和后台进行交互的数据格式使用的最多的是JSON,这里简单描述,在springm ...
- JAVA理解逻辑程序的书上全部重要的习题
今天随便翻翻看以前学过JAVA理解逻辑程序的书上全部练习,为了一些刚学的学弟学妹,所以呢就把这些作为共享了. 希望对初学的学弟学妹有所帮助! 例子:升级“我行我素购物管理系统”,实现购物结算功能 代码 ...
- html meta标签使用总结
meta标签作用 META标签是HTML标记HEAD区的一个关键标签,提供文档字符集.使用语言.作者等基本信息,以及对关键词和网页等级的设定等,最大的作用是能够做搜索引擎优化(SEO). PS:便于搜 ...
- [深入学习Web安全](5)详解MySQL注射
[深入学习Web安全](5)详解MySQL注射 0x00 目录 0x00 目录 0x01 MySQL注射的简单介绍 0x02 对于information_schema库的研究 0x03 注射第一步—— ...
- SharePoint 2013 使用JavaScript对象模型配置智能提示
前言 默认在VS2012/2013中编写SharePoint JavaScript 客户端对象模型,都没有智能感知的功能,用起来非常麻烦:其实,我们可以手动配置一下,让JavaScript可以进行智能 ...