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下利用fso判断文件是否存在的代码
Dec 11 Javascript
jquery实现瀑布流效果分享
Mar 26 Javascript
js实现简单的联动菜单效果
Aug 19 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
Sep 19 Javascript
jQuery获取当前点击的对象元素(实现代码)
May 19 Javascript
浅谈js中几种实用的跨域方法原理详解
Dec 02 Javascript
Async Validator 异步验证使用说明
Jul 03 Javascript
Node.js利用断言模块assert进行单元测试的方法
Sep 28 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
Jul 23 Javascript
Node.js创建一个Express服务的方法详解
Jan 06 Javascript
JS Web Flex弹性盒子模型代码实例
Mar 10 Javascript
JavaScript Window浏览器对象模型原理解析
May 30 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
JQuery之拖拽插件实现代码
2011/04/14 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
Node.js创建Web、TCP服务器
2017/12/05 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
Python模拟三级菜单效果
2017/09/11 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
银行优秀员工事迹
2014/02/06 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
培训研修方案
2014/06/06 职场文书
雷人标语集锦
2014/06/19 职场文书
国王的演讲观后感
2015/06/03 职场文书
淮海战役观后感
2015/06/11 职场文书
高三物理教学反思
2016/02/20 职场文书
高中化学教学反思
2016/02/22 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python