这里是修真院web小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解web知识/技能,本篇分享的是:

【angular控制器是什么? 】

一、背景介绍

AngularJS 控制器是常规的 JavaScript 对象。AngularJS 控制器 控制 AngularJS 应用程序的数据。简单的说:在angularJS中,controller是一个javascript函数/类,用于操作作用域中,各个对象的初始状态以及相应的行为。

二、知识剖析

1.举个例子解释controller的作用域

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body ng-app="demo">
<div ng-controller="first">
{{name}}
</div>
<p ng-controller="second">
{{name}}
</p>
</body>
<script src="https://cdn.bootcss.com/angular.js/1.6.6/angular.min.js"></script>
<script>
angular.module("demo",[])
.controller('first',function ($scope) {
$scope.name="胖虎";
})
.controller('second',function ($scope) {
$scope.name="大雄";
})
</script>
</html>

胖虎&大雄

也就是说,在HTML中,绑定ng-controller的那个DOM节点内的所有子标签,将会是当前controller的作用域。在大型项目中,如果HTML DOM 中有多个作用域,这时你就需要知道你使用的 scope 对应的作用域是哪一个。

2.多controller的实现

根据上面的例子,我们知道,angularJS中view层解析是通过controller的作用域来将$scope对象解析成相应的内容,因此我们可以在同一个界面上划分不同的模块,通过不同的控制器控制不同的模块来进行开发,这样通过划分模块的开发方式,对今后维护代码带来了便利。
在编码实战中,我将会具体介绍这个问题。

三、常见问题

controller之间的数据该如何传输?

四、解决方案

使用service实现controller之间的数据传输。

在之前的例子我们提到,controller是相对独立的,两个controller之间,内存是不共享的,同级DOM下,两个controller是无法互相访问其中的属性或者方法的。
那么,在实际项目中,我们会有很多的页面和控制器,不同页面下的controller之间有时候是需要传输数据的,之前我们学习了localStorage,用于页面之间的传参。
其实,官方建议页面之间通过service互相访问。
具体内容见 扩展思考。

五、编码实战

在controller中嵌套controller会出现什么样的问题?
首先,我将原来页面中两个控制器所在的div外面又套了一个控制器,添加了1个变量,并将其余两个控制器中的同名变量删除。如下

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body ng-app="demo">
<div ng-controller="all">
{{name}}
<div ng-controller="first">
{{name}}
</div>
<p ng-controller="second">
{{name}}
</p>
</div>
</body>
<script src="https://cdn.bootcss.com/angular.js/1.6.6/angular.min.js"></script>
<script>
angular.module("demo",[])
.controller('first',function ($scope) {
// $scope.name="胖虎";
})
.controller('second',function ($scope) {
// $scope.name="大雄";
})
.controller('all',function ($scope) {
$scope.name="小夫";
})
</script>
</html>

小夫

由此可见,controller的作用域跟js作用域相似。
注意:在大型项目中,为了代码规范,很少会使用这种方法,同时这种行为很危险!

六、扩展思考

如何使用angular中的Service服务在多个controller之间的进行数据传输?

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body ng-app="demo"><div style="background:#6ddfff;" ng-controller="first">
<button ng-click="change()">更换演员</button><br/>
{{role.name}}<br/>
{{role.sex}}
</div>
<div style="background:#ff7774;" ng-controller="second">
<button ng-click="start()">演出开始</button><br/>
{{role.name}}<br/>
{{role.sex}}
</div>
</body>
<script src="https://cdn.bootcss.com/angular.js/1.6.6/angular.min.js"></script>
<script>
angular.module("demo",[])
.service("demoService",function(){
this.actor={
name:"大雄",
sex:"男"
};
this.actress={
name:"静香",
sex:"女"
}
})
.controller("first",function ($scope,demoService) {
$scope.role=demoService.actor;
$scope.change=function () {
demoService.actor={
name:"胖虎",
sex:"男"
};
$scope.role=demoService.actor;
}
})
.controller("second",function ($scope,demoService) {
$scope.role=demoService.actress;
$scope.start=function () {
$scope.role=demoService.actor;
}
})
</script>
</html>

点击按钮之前:

大雄&静香

先点击“更换演员”:

胖虎&静香

再点击“演出开始”:

胖虎

以上只是简单的使用了service,更多的方法可以自行百度学习下。

七、更多讨论

讨论点一、在开发项目中,如何有效的管理controller和service文件?
讨论点二、创建service还有哪些方式?

八、参考文献

参考一:神奇的angularJS——controller控制器的作用
参考二:神奇的angularJS --连接controller的桥梁 service

【更多内容,欢迎加入交流群565763832与大家一起讨论交流】

angular控制器是什么?相关推荐

  1. uglify压缩angular控制器注意

    前段时间尝试压缩过公司angular控制器js,压缩后js大小几乎都缩小50%以上,但是使用的时候出错了.今天有空整理了下: angularjs是通过控制器构造函数的参数名字来进行依赖注入,压缩控制器 ...

  2. 初识 angular js

    创建第一个 angularjs 项目 <html ng-app>  : 表名这个是angularjs 项目 双大括号标记 {{ }} 的内容是问候语中绑定的表达式 Angular 模型变量 ...

  3. angular8 rest_带有Angular JS的Java EE 7 – CRUD,REST,验证–第2部分

    angular8 rest 这是Angular JS承诺的Java EE 7的后续版本–第1部分 . 花了比我预期更长的时间(找到时间来准备代码和博客文章),但是终于到了! 应用程序 第1部分中的原始 ...

  4. 带有Angular JS的Java EE 7 – CRUD,REST,验证–第2部分

    这是Angular JS承诺的Java EE 7的后续版本–第1部分 . 花了比我预期更长的时间(找到时间来准备代码和博客文章),但是终于到了! 应用程序 第1部分中的原始应用程序只是带有分页的简单列 ...

  5. Angular讲义 ---作用域

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

  6. angular之入门基础

    一.angular 1,angular 的有引入:必须在文档流之前引入(需要注意的是 angular 和原生的js 不互通) 2,angular 是由谷歌开发的框架,奇特点是对于DOM的操作变的更加的 ...

  7. Angular指令渗透式理解

    通过一段时间对angular指令的使用,理解了angular指令的意义,下面逐一介绍一下. ng-app:定义一个angualr模块,表示angular作用的范围,如下代码: ng-app在html标 ...

  8. 04控制器-AngularJS基础教程

    0. 目录 目录 前言 正文 1 ng-controller 2 构建模型-Constructing the model 3 控制器作为属性名-Controller as propertyName 4 ...

  9. Angular 表单验证

    模板驱动验证 使用模板驱动验证需要依赖于原生的HTML表单验证器 Angular 会用指令来匹配具有验证功能的这些属性. 原生的HTMl验证器主要分两种 通过语义类型来进行定义 通过验证相关的属性来进 ...

最新文章

  1. C# WinForm开发系列 - ListBox/ListView/Panel
  2. 获取Matlab 30天在线试用版本
  3. SAP云平台CloudFoundry的Access Token和refresh token
  4. 对口高考计算机vf试题,计算机对口升学模拟答案.doc
  5. hawq state 报错: the database is down, but Ambari shows all hawq services as being
  6. html5 心跳效果,css3实现心脏跳动
  7. 如何下载指定版本的elasticsearch和kibana
  8. leetcode 20. 有效的括号 (python)
  9. python if __name__ == ' __main__'
  10. js开源框架最新版下载
  11. Linux中vim的安装和使用
  12. kindle索引_kindle索引一般多久
  13. 软件测试工具大全(这可能是目前为止最全的测试工具集合)
  14. sis 最新_传统SIS系统面临考验——“可持续的安全仪表系统”来袭
  15. 搜狗二季度财报解读:有扎实的现在,也有性感的未来
  16. 西南大学计算机学院导师,西南大学计算机与信息科学学院研究生导师简介-陈武...
  17. 微信小程序获取昵称,头像
  18. C语言文件编程题目(一)
  19. 摩客怎么设置安卓的dp_摩客-官方版-摩客(Mockplus)V2.1.9.2-独木成林
  20. 用嘉立创画pcb布局布线技巧

热门文章

  1. yipin project 04
  2. Android按键事件——上层与驱动的映射
  3. iOS 图片转NSData
  4. 物联卡中心:物联卡如何充值,移动物联卡如何查号码
  5. C++,继承、虚函数解惑!
  6. RS-232-C串口通讯协议解析
  7. 选择CAD快速看图软件操作
  8. 图像语义分割论文(一)ENET
  9. 从零开始搭建搜索推荐系统(五十三)QUERY从分词检索进阶
  10. 项目质量管理的10个要点