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 相关文章推荐
Array.prototype.concat不是通用方法反驳[译]
Sep 20 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
Jan 09 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
在IE8上JS实现combobox支持拼音检索功能
May 23 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
Aug 01 Javascript
JavaScript注入漏洞的原理及防范(详解)
Dec 04 Javascript
微信小程序侧边栏滑动特效(左右滑动)
Jan 23 Javascript
JavaScript实现按键精灵的原理分析
Feb 21 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
May 05 jQuery
bootstrap-table实现服务器分页的示例 (spring 后台)
Sep 01 Javascript
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
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
星际争霸中的热键
2020/03/04 星际争霸
PHP出错界面
2006/10/09 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
asp.net和php的区别点总结
2019/10/10 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
公司清洁工岗位职责
2013/12/14 职场文书
优秀党员主要事迹
2014/01/19 职场文书
人民教师求职自荐信
2014/03/12 职场文书
请假条怎么写
2014/04/10 职场文书
小学一年级学生评语
2014/04/22 职场文书
科学发展观演讲稿
2014/09/11 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
幼师求职自荐信
2015/03/26 职场文书
员工升职自荐信
2015/03/27 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server