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 tab 选项卡
Apr 26 Javascript
基于Jquery的标签智能验证实现代码
Dec 27 Javascript
JS中 用户登录系统的解决办法
Apr 15 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
Easyui Treegrid改变默认图标的方法
Apr 29 Javascript
jquery判断iPhone、Android设备类型
Sep 14 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
Jan 23 Javascript
理顺8个版本vue的区别(小结)
Sep 17 Javascript
JavaScript惰性求值的一种实现方法示例
Jan 11 Javascript
微信小程序 WXML节点信息查询详解
Jul 29 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
Sep 18 Javascript
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 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正则走开
2008/03/15 PHP
PHP 递归效率分析
2009/11/24 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
php中请求url的五种方法总结
2017/07/13 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
js函数排序的实例代码
2013/07/01 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
js实现简单进度条效果
2020/03/25 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
Python基础学习之常见的内建函数整理
2017/09/06 Python
Flask数据库迁移简单介绍
2017/10/24 Python
Python多层装饰器用法实例分析
2018/02/09 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
美国精油公司:Plant Therapy
2019/05/17 全球购物
中间件的定义
2016/08/09 面试题
社区党员先进事迹
2014/01/22 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
爱的承诺书
2015/01/20 职场文书
婚宴领导致辞
2015/07/28 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技