AngularJS入门教程之Scope(作用域)


Posted in Javascript onJuly 27, 2016

AngularJS Scope(作用域)

Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。

Scope 是一个对象,有可用的方法和属性。

Scope 可应用在视图和控制器上。

如何使用 Scope

当你在 AngularJS 创建控制器时,你可以将 $scope 对象当作一个参数传递:

AngularJS 实例

控制器中的属性对应了视图上的属性:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

{{carname}}
</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
 $scope.carname = "Volvo";
});
</script>

<p>控制器中创建一个属性名 "carname",对应了视图中使用 {{ }} 中的名称。</p>

</body>
</html

运行结果:

Volvo

控制器中创建一个属性名 "carname",对应了视图中使用 {{ }} 中的名称。

当在控制器中添加 $scope 对象时,视图 (HTML) 可以获取了这些属性。

视图中,你不需要添加 $scope 前缀, 只需要添加属性名即可,如: {{carname}}。

Scope 概述

AngularJS 应用组成如下:

View(视图), 即 HTML。

Model(模型), 当前视图中可用的数据。

Controller(控制器), 即 JavaScript 函数,可以添加或修改属性。

scope 是模型。

scope 是一个 JavaScript 对象,带有属性和方法,这些属性和方法可以在视图和控制器中使用。

AngularJS 实例

如果你修改了视图,模型和控制器也会相应更新:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<input ng-model="name">
我的名字是 {{name}}

</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
 $scope.name = "John Doe";
});
</script>

<p>当你修改输入框中的值时,会影响到模型(model),当然也会影响到控制器对应的属性值。</p>

</body>
</html>

运行结果:

我的名字是 John Doe

当你修改输入框中的值时,会影响到模型(model),当然也会影响到控制器对应的属性值。

Scope 作用范围

了解你当前使用的 scope 是非常重要的。
在以上两个实例中,只有一个作用域 scope,所以处理起来比较简单,但在大型项目中, HTML DOM 中有多个作用域,这时你就需要知道你使用的 scope 对应的作用域是哪一个。

AngularJS 实例

当我们使用 ng-repeat 指令时,每个重复项都访问了当前的重复对象:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<ul>
 <li ng-repeat="x in names">{{x}}</li>
</ul>

</div>

<script>
var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {
 $scope.names = ["Emil", "Tobias", "Linus"];
});
</script>
	
</body>
</html>

运行结果:

  • Emil
  • Tobias
  • Linus

每个 <li> 元素可以访问当前的重复对象,这里对应的是一个字符串, 并使用变量 x 表示。

根作用域

所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。
$rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用。

AngularJS 实例

创建控制器时,将 $rootScope 作为参数传递,可在应用中使用:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

姓氏为 {{lastname}} 家族成员:
<ul>
 <li ng-repeat="x in names">{{x}} {{lastname}}</li>
</ul>

</div>

<script>
var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope, $rootScope) {
 $scope.names = ["Emil", "Tobias", "Linus"];
 $rootScope.lastname = "Refsnes";
});
</script>

<p>注意 $rootScope 在循环对象内外都可以访问。</p>

</body>
</html>

运行结果:

姓氏为 Refsnes 家族成员:

  • Emil Refsnes
  • Tobias Refsnes
  • Linus Refsnes

注意 $rootScope 在循环对象内外都可以访问。

Javascript 相关文章推荐
JavaScript是否可实现多线程  深入理解JavaScript定时机制
Dec 22 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
javascript获取xml节点的最大值(实现代码)
Dec 11 Javascript
setInterval计时器不准的问题解决方法
May 08 Javascript
For循环中分号隔开的3部分的执行顺序探讨
May 27 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
Nov 09 Javascript
JQuery ztree 异步加载实例讲解
Feb 25 Javascript
javascript弹出窗口中增加确定取消按钮
Jun 24 Javascript
使用vue构建移动应用实战代码
Aug 02 Javascript
每个 JavaScript 工程师都应懂的33个概念
Oct 22 Javascript
利用Electron简单撸一个Markdown编辑器的方法
Jun 10 Javascript
小程序的上传文件接口的注意要点解析
Sep 17 Javascript
AngularJS入门之动画
Jul 27 #Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
Jul 27 #Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 #Javascript
AngularJS 模型详细介绍及实例代码
Jul 27 #Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
Jul 27 #Javascript
详解Angular开发中的登陆与身份验证
Jul 27 #Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 #Javascript
You might like
PHP中,文件上传
2006/12/06 PHP
php获取地址栏信息的代码
2008/10/08 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
使用Python对MySQL数据操作
2017/04/06 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
交通安全教育制度
2014/02/02 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
房贷工资证明范本
2015/06/12 职场文书
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python