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面向对象编程(一) 实例代码
Jun 25 Javascript
jquery获取复选框被选中的值
Mar 22 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 Javascript
node.js中使用socket.io制作命名空间
Dec 15 Javascript
jQuery实现的文字hover颜色渐变效果实例
Feb 20 Javascript
DOM中事件处理概览与原理的全面解析
Aug 16 Javascript
AngularJs 国际化(I18n/L10n)详解
Sep 01 Javascript
AngularJS  ng-repeat遍历输出的用法
Jun 19 Javascript
使用nvm管理不同版本的node与npm的方法
Oct 31 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
May 23 Javascript
Vue高版本中一些新特性的使用详解
Sep 25 Javascript
实例分析编写vue组件方法
Feb 12 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
php扩展ZF――Validate扩展
2008/01/10 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
python斐波那契数列的计算方法
2018/09/27 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
师范生自我鉴定范文
2013/10/05 职场文书
索桥的故事教学反思
2014/02/06 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
服务宗旨标语
2014/07/01 职场文书
十佳党员事迹材料
2014/08/28 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL