模块:

在 AngularJS 中,将函数代码全部都定义在全局命名空间中绝对不是什么好主意,全局变量污染会使冲突几率变大,调试困难,降低开发效率。上次写计时器的 controller 时,我们把 controller 写在了一个全局命名空间中定义的函数里,这就是反例。在 Angular 中,模块是定义应用的主要方式。模块包含了主要的应用代码。一个应用可以包含多个模块,每一个模块内都包含了定义具体功能的代码。

使用模块的好处有很多:

  • 保持全局命名空间的整洁;
  • 便于测试;
  • 可以复用;
  • 使应用可以以任意顺序加载代码各个部分。

定义模块方法:

angular.module('moduleName',[]);

参数:

1. name (字符串)

模块的名称

2. requires (字符串数组)

Angular 的依赖注入机制,数组元素为当前定义模块所依赖的模块名称。


作用域:

作用域(scope)是构成 Angular 应用的核心基础。应用的作用域是和应用的数据模型相关联的,同时作用域也是表达式执行的上下文。$scope 是定义应用业务逻辑,控制器方法和视图属性的地方。

作用域是视图和控制器之间的胶水。在应用渲染并呈现给用户之前,视图中的模板会和作用域进行连接,然后应用会对 DOM 进行设置以便将属性变化通知给 AngularJS。这个功能让 XHR请求等 promise 对象的实现变得非常容易。

$scope 是可以嵌套的,在子$scope中我们可以引用父$scope 的属性,就像 JavaScript 一样。这个分层就是,当我们为子级 DOM 元素创建了一个新的作用域时,其实也是为子元素创建了一个新的执行上下文。

作用域提供了监视数据模型变化的能力,我们可以使用 $apply 机制,将数据模型的变化在整个应用范围内进行通知。

$rootScope 是 Angular 中最接近全局作用域的对象。所以不要在它上面附加太多业务逻辑,这跟污染全局作用域是一样的。

$scope 就是一个JavaScript对象,我们可以为它添加或者删除属性,他的所有属性都可以自动被视图访问到。它是视图和控制器之间的胶水,也是视图与 HTML 的桥梁。

生命周期

  创建:在创建控制器或者指令时,AngularJS 会同时用$injector 创建一个新的作用域,并在指令或者控制器运行时将该作用域传递进去。

  链接:当 Angular 开始运行时,所有的$scope 对象都会附加或者链接到视图中。所有创建$scope 对象的函数也会将自身附加到视图中。

     这些作用域将会注册当Angular 应用上下文变化时需要运行的函数。

  更新:事件循环运行在$rootScope上,在每个子作用域中进行脏值检查,发现任意变化,即可执行相应的回调函数。

  销毁:当一个$scope 在视图中不再被需要时,他将被销毁。

AngularJS 笔记系列(三)模块和作用域的更多相关文章

  1. Python基础笔记系列三:list列表

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python中的list列表是一种序列型数据类型,一有序数据集合用逗号间隔 ...

  2. AngularJS 笔记系列(四)控制器和表达式

    控制器:在 Angular 中控制器是一个函数,用来向作用域中添加额外的功能.我们用它来给作用域对象设置初始状态,并添加自定义行为. 使用方法: var app = angualr.module('a ...

  3. Java基础复习笔记系列 三

    前几节都是基础中的基础,从第三讲的笔记开始,每次笔记针对Java的一个知识块儿.  Java异常处理 1.什么是异常? 异常是指运行期出的错误.比如说:除以一个0:数组越界:读取的文件不存在. 异常处 ...

  4. Android群英传笔记系列三 view的自定义:实现一个模拟下载

    1.实现效果:动态显示进度(分别显示了整个的动态改变的过程,然后完成后,弹出一个对话框)       2.实现过程:可以分为绘制一个圆,圆弧和文本三部分,然后在MainAcitivity中通过线程模拟 ...

  5. 《ASP.NET Core In Action》读书笔记系列三 ASP.NET Core如何处理请求的?

    在本节中,您将看到ASP.NET Core应用程序如何运行的,从请求URL开始到页面呈现在浏览器中. 为此,您将看到 一个HTTP请求在Web服务器中是如何被处理的.ASP.NET Core如何扩展该 ...

  6. LeetCode 笔记系列三 3Sum

    题目:Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...

  7. AngularJS 笔记系列(五)过滤器 filter

    过滤器是用来格式化给用户展示的数据的. 在 HTML 中的模板绑定符号{{}} 内通过|符号来调用过滤器. 大写:{{ name | uppercase }} 也可以在 JS 中进行调用$filter ...

  8. Spring框架系列(三)--Bean的作用域和生命周期

    Bean的作用域 Spring应用中,对象实例都是在Container中,负责创建.装配.配置和管理生命周期(new到finalize()) Spring Container分为两种: 1.BeanF ...

  9. Windows-universal-samples学习笔记系列三:Navigation

    Navigation Back Button Master/detail Navigation menu (XAML) Pivot Projection XHR, handling navigatio ...

随机推荐

  1. ThinkPHP中的验证码不出现的解决办法

    出现这种问题的原因可能是因为代码写的不规范,出现了其他的输出:解决办法: 原代码:     public function captchaAction()    {        $verify = ...

  2. when case group by 的用法集合

    1.用那个以前大家都熟悉的例子,要求是依旧下面的表格求每个大洲的人口总和 国家(countrcoungry) 人口(population) 中国 600 美国 100 加拿大 100 英国 200 法 ...

  3. selenium基础框架的封装(Python版)这篇帖子在百度关键词搜索的第一位了,有图为证,开心!

    百度搜索结果页地址:https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=se ...

  4. Docker容器技术(目录)

    Docker介绍和部署请自行搜索官方网站 [01]Docker学习:镜像管理 [02]Docker学习:容器管理 [03]Docker学习:网络管理 [04]Docker学习:Dockerfile [ ...

  5. Leetcode: Merge/Insert Interval

    题目 Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[ ...

  6. 自定义控件_水平滑动的View 自定义属性

    保持饥饿,保持愚蠢,我们对待事情本来应该就是这样的 接下来我要写一个水平滑动的自写义,实现效果 水平滑动我们有很多种实现方法,recyceryView,HorizontalScrollView都可以, ...

  7. 移动端ios中click点击失效

    原因: Safari应该有某种机制用来节约资源,就是如果元素摸起来不像可以点的,就不给他响应事件. 所以,需要在点击的元素上加上{cursor:pointer},就解决了.当然还有别的方法,检点来说就 ...

  8. Oracle 查询表信息(字段+备注) .

    var t=   CardService.GetInstance().test("900000000233");          foreach (DataRow row in ...

  9. nexus配置第三方库文件

    进入nexus管理界面 默认用户名密码:admin/admin123 在左侧Views/Repositories中选择Repositories,然后在右侧的面板中选择3rd party,在下方arti ...

  10. 170309、MySQL存储引擎MyISAM与InnoDB区别总结整理

    1.MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB. 2.MyISAM与InnoDB存 ...