AngularJS 1.x系列:AngularJS控制器(3)
1. 控制器(Controller)定义
控制器(Controller)在AngularJS中作用是增强视图(View),AngularJS控制器是一个构造方法,用来向视图(View)中添加额外功能。
ng-controller指令定义AngularJS应用程序控制器。
控制器是JavaScript对象,由标准的JavaScript对象的构造函数创建。
当控制器通过ng-controller指令被添加到DOM页面时,AngularJS会通过控制器构造函数生成一个对象。
在生成构造函数对象过程中,$scope对象作为参数注入其中,并允许访问$scope对象。
通过$scope对象与页面中的元素进行数据绑定,实现数据从控制器(Controller)到视图(View)的过程。
2. 控制器初始化$scope对象
控制器(Controller)的作用是操作$scope对象,具体表现在:
◊ 初始化$scope对象
◊ 为$scope对象添加自定义实现
$scope对象可以看作是由控制器(Controller)封装后的ViewModel。
2.1 初始化$scope对象
示例代码:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="../lib/angular.min.js"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.controller("HelloCtrl", function($scope){
$scope.text = "Hello World!";
});
</script>
</head>
<body>
<div ng-controller="HelloCtrl">
<div ng-bind="text"></div>
</div>
</body>
</html>
2.2 为$scope对象添加自定义方法
示例代码:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="../lib/angular.min.js"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.controller("HelloCtrl", function($scope){
$scope.text = "Hello World!";
$scope.getText = function(){
$scope.text = "Hello AngularJS!";
return $scope.text;
};
});
</script>
</head>
<body>
<div ng-controller="HelloCtrl">
<div ng-bind="text"></div>
<input type="button" value="ChangeText" ng-click="getText()" />
</div>
</body>
</html>
2.3 为$scope对象添加带参数方法
示例代码:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="../lib/angular.min.js"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.controller("HelloCtrl", ["$scope", function($scope){
$scope.text = "Hello World!";
$scope.getText = function(){
$scope.text = "Hello AngularJS!";
return $scope.text;
};
$scope.setText = function(param){
$scope.text = param;
};
}]);
</script>
</head>
<body>
<div ng-controller="HelloCtrl">
<div ng-bind="text"></div>
<input type="button" value="ChangeText" ng-click="setText('Hello AngularJS!')" />
</div>
</body>
</html>
$scope对象方法多个参数之间逗号(,)隔开
2.4 $scope对象属性和方法的继承
AngularJS中的“ng-controller”指令允许在不同层次元素中指定控制器,处于内层控制器中的$scope对象将会自动继承外层控制器中的$scope对象的属性和方法。
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="../lib/angular.min.js"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.controller("ParentCtrl", ["$scope", function($scope){
$scope.text = "Text";
}]);
app.controller("ChildCtrl", ["$scope", function($scope){
$scope.child_text = "Child Text";
}]);
</script>
</head>
<body>
<div ng-controller="ParentCtrl">
<div ng-bind="text"></div>
<div ng-controller="ChildCtrl">
<div ng-bind="child_text"></div>
</div>
</div>
</body>
</html>
3. 作用域(Scope)
作用域(scope)是构成AngularJS应用的核心基础,AngularJS将$scope设计成和DOM类似的结构,$scope可以进行嵌套,可以引用父级$scope中的属性和方法。
3.1 $rootScope
AngularJS启动并生成视图时,会将根ng-app元素同$rootScope进行绑定。$rootScope是所有$scope对象的最上层。
$rootScope是AngularJS中最接近全局作用域的对象,不建议在$rootScope上绑定太多业务逻。
所有的应用都有一个$rootScope,可以作用在ng-app指令包含的所有HTML元素中。
$rootScope可作用于整个应用中。在$rootscope中定义的属性及方法,可以在各个controller的$scope中使用。
示例代码:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="../lib/angular.min.js"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.run(["$rootScope", function($rootScope){
$rootScope.text = "Hello AngularJS!";
}]);
</script>
</head>
<body>
{{ text }}
</body>
</html>
3.2 $scope
AngularJS中$scope对象作为数据模型,自定义属性和方法,可以在控制器(Controller)和视图(View)中使用。
$scope对象的生命周期处理有四个不同阶段:
1>.创建
在创建控制器(Controller)或指令时,AngularJS会用$injector创建一个新的作用域($scope),并在这个新建的控制器(Controller)或指令运行时注入作用域($scope)。
2>.链接
当Angular开始运行时,所有的$scope对象都会附加或者链接到视图中。
所有创建$scope对象的函数也会将自身附加到视图中。
这些作用域将会注册当Angular应用上下文中发生变化时需要运行的$watch函数。
3>.更新
当事件循环运行时,它通常执行在顶层$scope对象上(被称作$rootScope),每个子作用域都执行自己的脏值检测。每个监控函数都会检查变化。如果检测到任意变化,$scope对象就会触发指定的回调函数。
4>.销毁
当一个$scope在视图中不再需要时,这个作用域将会清理和销毁自己。
示例代码:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="../lib/angular.min.js"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.controller("HelloCtrl", ["$scope", function($scope){
$scope.text = "Hello AngularJS!";
}]);
</script>
</head>
<body>
<div ng-controller="HelloCtrl">
{{ text }}
</div>
</body>
</html>
ng-controller指令为这个DOM元素创建了一个新的$scope对象,并将它嵌套在$rootScope中。
$scope与$rootScope具有相同属性或方法时,$scope将覆盖$rootScope中相同属性或方法。
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="../lib/angular.min.js"></script>
<script type="text/javascript">
var app = angular.module("app", []);
app.controller("HelloCtrl", ["$scope", "$rootScope", function($scope, $rootScope) {
$rootScope.text = "Hello";
// $scope.text = "Hello AngularJS!";
}]);
</script>
</head>
<body>
<div ng-controller="HelloCtrl">
{{ text }}
</div>
</body>
</html>
AngularJS 1.x系列:AngularJS控制器(3)的更多相关文章
- [后端人员耍前端系列]AngularJs篇:30分钟快速掌握AngularJs
一.前言 对于前端系列,自然少不了AngularJs的介绍了.在前面文章中,我们介绍了如何使用KnockoutJs来打造一个单页面程序,后面一篇文章将介绍如何使用AngularJs的开发一个单页面应用 ...
- Angular系列----AngularJS入门教程05:双向绑定(转载)
在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f ...
- Angular系列------AngularJS快速开始(转载)
Hello World! 开始学习AngularJS的一个好方法是创建经典应用程序“Hello World!”: 使用您喜爱的文本编辑器,创建一个HTML文件,例如:helloworld.html. ...
- AngularJS高级程序设计读书笔记 -- 控制器篇
作用域组成了一个能够用于在控制器之间形成通信的体系结构. 1. 控制器和作用域的基本原理 控制器就像领域模型与视图之间的纽带, 他给视图提供数据与服务, 并且定义了所需的业务逻辑, 从而将用户行为转换 ...
- AngularJS 1.x系列:AngularJS简介及第一个应用(2)
1. 安装AngularJS 1.1 AngularJS官网 Github源码:https://github.com/angular/angular.js 官网:https://angularjs.o ...
- AngularJS 1.x系列:AngularJS服务-Service
1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...
- Angular系列----AngularJS入门教程00:引导程序(转载)
我们现在开始准备编写AngularJS应用——phonecat.这一步骤(步骤0),您将会熟悉重要的源代码文件,学习启动包含AngularJS种子项目的开发环境,并在浏览器端运行应用. 进入angul ...
- AngularJS 1.x系列:AngularJS服务-Service、Factory、Provider、Value及Constant(5)
1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...
- AngularJS学习笔记二:AngularJS指令
AngularJS 指令: AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. 几个常用 指令: ng-app 指令 ...
- AngularJS学习笔记2——AngularJS的初始化
本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化. Angular <script> Tag 下面通过一小段代码来介绍推荐的自动初始化过程: <!doctyp ...
随机推荐
- 20190325-HTML框架、audio标签、vedio标签、source标签、HTML表单
目录 1.HTML框架 frameset:框架标记 frame:框架内文件 iframe:内嵌框架 2.audio标签 src:URL(可以用source标签替代) autoplay:自动播放 pre ...
- vue webpack build时关闭debug和console
1.找到 webpack.prod.conf.js ,搜索 UglifyJsPlugin,添加配置 uglifyOptions: { compress: { warnings: false, drop ...
- 十分钟(小时)学习pandas
十分钟学习pandas 一.导语 这篇文章从pandas官网翻译:链接,而且也有很多网友翻译过,而我为什么没去看他们的,而是去官网自己艰难翻译呢? 毕竟这是一个学习的过程,别人写的不如自己写的记忆深刻 ...
- 编写高性能.NET程序-《Concurrency in .NET》(1)- 为什么要读这本书?
最近广州.NET微软技术俱乐部对如何编写高性能.NET程序发起了讨论. 首先是在ORM和SQL方面进行了讨论,主题当然是经久不衰的月经贴: EF性能很差. Edi.Wang专门写了一篇文章< ...
- 12月16日广州.NET俱乐部下午4点爬白云山活动
正如我们在<广州.NET微软技术俱乐部与其他技术群的区别>和<广州.NET微软技术俱乐部每周三五晚周日下午爬白云山活动>里面提到的, 我们会在每周三五晚和周日下午爬白云山. ...
- AspNetCore.FileLog 一款很不错的日志记录工具
AspNetCore.FileLog 该项目作者为伟哥,GitHub地址:https://github.com/amh1979:该项目维护者为鸟窝,GitHub地址:https://github.co ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- mssql sqlserver获取指定月份当月天数总和
摘要: 下文通过sql函数的形式,获取指定月份的总天数 实验环境:sqlserver 2008 R2 制作思路: 1. 获取指定月份的第一天, 2. 并采用dateadd向后加一个月形成一个新的日期 ...
- Got a packet bigger than‘max_allowed_packet’bytes错误的解决方法
通常项目上线前都有一些初始化数据需要导入,在今天博客系统发布前我使用sqlyog工具远程登录服务器的Mysql数据库,执行sql脚本对初始数据进行导入的时候报错: Got a packet bigge ...
- frameset基础了解
frameset 元素可定义一个框架集.它被用来组织多个窗口(框架). 列子:一个分为头部导航栏.左边目录.右侧主体信息.(暂时没设计底部栏) <frameset rows="100, ...