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技巧
Dec 06 Javascript
javascript函数以及基础写法100多条实用整理
Jan 13 Javascript
JS增加行复制行删除行的实现代码
Nov 09 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
jquery搜索框效果实现方法
Jan 16 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 Javascript
AngularJs  Using $location详解及示例代码
Sep 02 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 Javascript
详解关于react-redux中的connect用法介绍及原理解析
Sep 11 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
Sep 23 Javascript
JavaScript中的E-mail 地址格式验证
Mar 28 Javascript
vue.js数据绑定操作详解
Apr 23 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中加密解密函数与DES加密解密实例
2014/10/17 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
python实现在IDLE中输入多行的方法
2018/04/19 Python
详解django2中关于时间处理策略
2019/03/06 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
Python设计密码强度校验程序
2020/07/30 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
三下乡活动方案
2014/01/31 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
小学生手册家长评语
2014/04/16 职场文书
人民调解员培训方案
2014/06/05 职场文书
奥林匹克的口号
2014/06/13 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书