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 相关文章推荐
JS打开层/关闭层/移动层动画效果的实例代码
May 11 Javascript
JavaScript简介
Feb 15 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
asp.net中oracle 存储过程(图文)
Aug 12 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
Django与Vue语法的冲突问题完美解决方法
Dec 14 Javascript
浅谈手写node可读流之流动模式
Jun 01 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
jQuery 选择方法及$(this)用法实例分析
May 19 jQuery
Taro小程序自定义顶部导航栏功能的实现
Dec 17 Javascript
聊聊vue 中的v-on参数问题
Jan 29 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
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
Python的一些用法分享
2012/10/07 Python
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python的另外几种语言实现
2015/01/29 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
护理专业大学生自我推荐信
2014/01/25 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android