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 ...
随机推荐
- Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作
Android项目刮刮奖详解(四) 前言 我们已经成功实现了刮刮奖的功能了,本期是扩展篇,我们把这个View直接定义成开源控件,发布到JitPack上,以后有需要也可以直接使用,关于自定义控件的知识, ...
- ajax点击加载更多数据图片(预加载)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 20190321-HTML基本结构
目录 1.HTML概念 超文本标记语言 2.HTML版本 HTML HTML5 3.HTML基本结构 基本结构 元素.标签.属性 4.HTML常用标签 内容 1.HTML概念 HTML(HyperTe ...
- 浅谈"n个球"和"m个盒子"之间的乱伦关系
无视标题,从我做起 update in 2018.10.1: 补充了"至多为1的四中情况" 这玩意儿的官方名字应该是叫"Twelvefold way",共用12 ...
- arcgis for js学习之Draw类
arcgis for js学习之Draw类 <!DOCTYPE html> <html> <head> <meta http-equiv="Cont ...
- C++二分查找算法演示源码
如下内容段是关于C++二分查找算法演示的内容. #include <cstdio>{ int l = 0, r = n-1; int mid; while (l <= r){ mid ...
- Activity的启动流程
前言:新启动一个activity分为两种情况,第一种是在Launcher的桌面点击icon图标启动一个新的应用,第二种是在应用启动的情况下从OneActivity->TwoActivity 其实 ...
- 云服务器挂载/dev/vdb1磁盘
1.首先检查是否有一块硬盘还未被挂载 2.如图所示,vdb还未被使用,开始分配它吧 [root@localhost ~]# fdisk /dev/vdb Command (m for help): n ...
- c/c++ 继承与多态 容器与继承1
问题:类B公有继承类A,类A有虚函数fun,类B覆盖了虚函数fun,有一个std::vector<A>,添加A的对象a,和B的对象b,到这个容器里,然后从vector里取出来,使用对象a. ...
- macos 远程 windows 10
使用的工具:Parallels Client 免费,可以从windows store 免费下载: 只有这个最好用,希望能帮到你.和原生的windows 远程桌面功能很像: