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)的更多相关文章

  1. [后端人员耍前端系列]AngularJs篇:30分钟快速掌握AngularJs

    一.前言 对于前端系列,自然少不了AngularJs的介绍了.在前面文章中,我们介绍了如何使用KnockoutJs来打造一个单页面程序,后面一篇文章将介绍如何使用AngularJs的开发一个单页面应用 ...

  2. Angular系列----AngularJS入门教程05:双向绑定(转载)

    在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f ...

  3. Angular系列------AngularJS快速开始(转载)

    Hello World! 开始学习AngularJS的一个好方法是创建经典应用程序“Hello World!”: 使用您喜爱的文本编辑器,创建一个HTML文件,例如:helloworld.html. ...

  4. AngularJS高级程序设计读书笔记 -- 控制器篇

    作用域组成了一个能够用于在控制器之间形成通信的体系结构. 1. 控制器和作用域的基本原理 控制器就像领域模型与视图之间的纽带, 他给视图提供数据与服务, 并且定义了所需的业务逻辑, 从而将用户行为转换 ...

  5. AngularJS 1.x系列:AngularJS简介及第一个应用(2)

    1. 安装AngularJS 1.1 AngularJS官网 Github源码:https://github.com/angular/angular.js 官网:https://angularjs.o ...

  6. AngularJS 1.x系列:AngularJS服务-Service

    1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...

  7. Angular系列----AngularJS入门教程00:引导程序(转载)

    我们现在开始准备编写AngularJS应用——phonecat.这一步骤(步骤0),您将会熟悉重要的源代码文件,学习启动包含AngularJS种子项目的开发环境,并在浏览器端运行应用. 进入angul ...

  8. AngularJS 1.x系列:AngularJS服务-Service、Factory、Provider、Value及Constant(5)

    1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...

  9. AngularJS学习笔记二:AngularJS指令

    AngularJS 指令: AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. 几个常用 指令: ng-app 指令 ...

  10. AngularJS学习笔记2——AngularJS的初始化

    本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化. Angular <script> Tag 下面通过一小段代码来介绍推荐的自动初始化过程: <!doctyp ...

随机推荐

  1. 20190325-HTML框架、audio标签、vedio标签、source标签、HTML表单

    目录 1.HTML框架 frameset:框架标记 frame:框架内文件 iframe:内嵌框架 2.audio标签 src:URL(可以用source标签替代) autoplay:自动播放 pre ...

  2. vue webpack build时关闭debug和console

    1.找到 webpack.prod.conf.js ,搜索 UglifyJsPlugin,添加配置 uglifyOptions: { compress: { warnings: false, drop ...

  3. 十分钟(小时)学习pandas

    十分钟学习pandas 一.导语 这篇文章从pandas官网翻译:链接,而且也有很多网友翻译过,而我为什么没去看他们的,而是去官网自己艰难翻译呢? 毕竟这是一个学习的过程,别人写的不如自己写的记忆深刻 ...

  4. 编写高性能.NET程序-《Concurrency in .NET》(1)- 为什么要读这本书?

    最近广州.NET微软技术俱乐部对如何编写高性能.NET程序发起了讨论.   首先是在ORM和SQL方面进行了讨论,主题当然是经久不衰的月经贴: EF性能很差. Edi.Wang专门写了一篇文章< ...

  5. 12月16日广州.NET俱乐部下午4点爬白云山活动

    正如我们在<广州.NET微软技术俱乐部与其他技术群的区别>和<广州.NET微软技术俱乐部每周三五晚周日下午爬白云山活动>里面提到的, 我们会在每周三五晚和周日下午爬白云山.   ...

  6. AspNetCore.FileLog 一款很不错的日志记录工具

    AspNetCore.FileLog 该项目作者为伟哥,GitHub地址:https://github.com/amh1979:该项目维护者为鸟窝,GitHub地址:https://github.co ...

  7. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  8. mssql sqlserver获取指定月份当月天数总和

    摘要: 下文通过sql函数的形式,获取指定月份的总天数 实验环境:sqlserver 2008 R2 制作思路: 1. 获取指定月份的第一天, 2. 并采用dateadd向后加一个月形成一个新的日期 ...

  9. Got a packet bigger than‘max_allowed_packet’bytes错误的解决方法

    通常项目上线前都有一些初始化数据需要导入,在今天博客系统发布前我使用sqlyog工具远程登录服务器的Mysql数据库,执行sql脚本对初始数据进行导入的时候报错: Got a packet bigge ...

  10. frameset基础了解

    frameset 元素可定义一个框架集.它被用来组织多个窗口(框架). 列子:一个分为头部导航栏.左边目录.右侧主体信息.(暂时没设计底部栏) <frameset rows="100, ...