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 相关文章推荐
jquery.qrcode在线生成二维码使用示例
Aug 21 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
node.js中的fs.chmodSync方法使用说明
Dec 18 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
jQuery表单事件实例代码分享
Aug 18 Javascript
关于List.ToArray()方法的效率测试
Sep 30 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
jQuery插件jsonview展示json数据
May 26 jQuery
Vue中this.$nextTick的作用及用法
Feb 04 Javascript
Postman环境变量全局变量使用方法详解
Aug 13 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实现的MySQL数据浏览器
2007/03/11 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
图片自动更新(说明)
2006/10/02 Javascript
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
JavaScript类库D
2010/10/24 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
js改变css样式的三种方法推荐
2016/06/28 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
2020/08/27 Javascript
浅谈Python的垃圾回收机制
2016/12/17 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
python模块导入的细节详解
2018/12/10 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
Python调用C/C++的方法解析
2020/08/05 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
高中生物教学反思
2014/02/05 职场文书
工会主席岗位责任制
2014/02/11 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
青春雷锋观后感
2015/06/10 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
Python面向对象之成员相关知识总结
2021/06/24 Python