详解angularjs 学习之 scope作用域


Posted in Javascript onJanuary 15, 2018

简介

Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。

Scope 是一个存储应用数据模型的对象,有可用的方法和属性。

Scope 可应用在视图和控制器上。

作用域是Web应用的控制器和视图之间的粘结剂:

控制器 --> 作用域 --> 视图(DOM)
指令 --> 作用域 --> 视图(DOM)

当你在 AngularJS 创建控制器时,你可以将 $scope 对象当作一个参数传递:

<div ng-controller="myCtrl">
<h1>{{name}}</h1>
</div>

<script>
var app = angular.module('test', []);
app.controller('myCtrl', function($scope) {
  $scope.name = "天下行走";
});
</script>

输出结果: 天下行走

控制器中创建一个属性名 "name" ,对应了视图中使用 {{ }} 中的名称。

当在控制器中添加 $scope 对象时,视图 (HTML) 可以获取了这些属性。

视图中,你不需要添加 $scope 前缀, 只需要添加属性名即可,如: {{name}} 。

AngularJS 应用组成如下:

View(视图) , 即 HTML。

Model(模型) , 当前视图中可用的数据。

Controller(控制器) , 即 JavaScript 函数,可以添加或修改属性。

scope 是一个 JavaScript 对象,带有 属性 和 方法 ,这些属性和方法可以在视图和控制器中使用。

再来看个例子:

<div ng-app="myApp" ng-controller="myCtrl">
  输入你的名字:
  <input ng-model="name">
  <h1>{{greeting}}</h1>
  <button ng-click='sayHello()'>greet</button>  
</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  $scope.name = "张三";
  $scope.sayHello = function() {
    $scope.greeting = $scope.name + '是个笨蛋!';
  };
});
</script>

在这个例子中,

  1. 控制器: MyCtrl ,它引用了 $scope 并在其上注册了两个属性和一个方法
  2. $scope 对象:持有上面例子所需的数据模型,包括 name 属性、 greeting 属性 (注:这是在 sayHello() 方法被调用时注册的) 和 sayHello() 方法
  3. 视图:拥有一个输入框、一个按钮以及一个利用双向绑定来显示数据的内容块

那么具体整个示例有这样两个流程,从控制器发起的角度来看就是:

1、控制器往作用域中写属性:

给作用域中的 name 赋值,然后作用域通知视图中的 input 数据变化了, input 因为通过 ng-model 实现了双向绑定可以知道 name 的变化,进而在视图中渲染出改变的值

2、控制器往作用域中写方法

给作用域中的 sayHello() 方法赋值,该方法被视图中的 button 调用,因为 button 通过 ng-click 绑定了该方法,当用户点击按钮时, sayHello() 被调用,这个方法读取作用域中的 name 属性,加上后缀字符串,然后赋值给在作用域中新创建的 greeting 属性

整个示例的过程如果从视图的角度看,那主要是以下三个部分:

1、input 中的渲染逻辑:展示了通过 ng-model 进行的作用域和 视图中某表单元素的双向绑定

  1. 根据 ng-model 中的 name 去作用域中取,如果已经有值,那么用这个默认值填充当前的输入框
  2. 接受用户输入,并且将用户输入的字符串传给 name ,这时候作用域中的该属性值实时更新为用户输入的值

2、button 中的逻辑

接受用户单击,调用作用域中的 sayHello() 方法

3、{{greeting}} 的渲染逻辑

  1. 初始阶段 :在用户未单击按钮时,不显示内容
  2. 取值阶段 :在用户单击后,这个表达式会去 scope 中取 greeting 属性,而本例中这个作用域和控制器是同一个的,这时候,该作用域下 greeting 属性已经有了,这时候这个属性就被取回来了
  3. 计算阶段 :在当前作用域下去计算 greeting 表达式,然后渲染视图,显示 张三是个笨蛋!

经过以上的两种角度分析示例过程,我们可以知道: 作用域(scope) 对象以及其属性是视图渲染的唯一数据来源。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
Aug 14 Javascript
使用jquery实现简单的ajax
Jul 08 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
May 11 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
Apr 01 Javascript
jQuery控制Div拖拽效果完整实例分析
Apr 15 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
Feb 19 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
bootstrap+jquery项目引入文件报错的解决方法
Jan 22 jQuery
JS返回页面时自动回滚到历史浏览位置
Sep 26 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
Dec 06 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
May 17 jQuery
JS创建自定义对象的六种方法总结
Dec 15 Javascript
高性能的javascript之加载顺序与执行原理篇
Jan 14 #Javascript
关于axios如何全局注册浅析
Jan 14 #Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
Jan 13 #Javascript
react-redux中connect的装饰器用法@connect详解
Jan 13 #Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 #Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
Jan 13 #Javascript
vuejs实现递归树型菜单组件
Jan 13 #Javascript
You might like
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
常见的jQuery选择器汇总
2014/11/24 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python 字典与字符串的互转实例
2017/01/13 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
Python异常的检测和处理方法
2018/10/26 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
python实现文件的备份流程详解
2019/06/18 Python
python操作excel让工作自动化
2019/08/09 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
python中的列表和元组区别分析
2020/12/30 Python
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
自荐信范文
2013/12/10 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS