angular中的scope
angular.element($0).scope()
什么是scope?
scope是一个refer to the application model的object。它是一个expression的执行上下文context。scopes模仿DOM的层次模型也有层次关系。Scopes可以watch一个expression也可以propagate events。
scope特性
scope提供API $watch来观察模型的变化
scope提供API $apply来传播angular外部世界(比如controller,service,event handler)造成的模型变更到系统中的各个view.
scopes可以嵌套,嵌套的scope要么是child scope或者isolated scope.一个child scope将从parent scope中继承属性,而isolated scope则不会。
scope提供了一个表达式执行的context。比如{{username}}这个表达式,除非给定一个定义了username属性的scope,否则是没有意义的。
scope作为data-model
scope是应用程序的controller和view之间的接口。在template linking阶段,directives建立起$watch expressions on the scope. $watch允许directives被通知到任何属性的变更,这样就允许一个directive来渲染变更过的数据到DOM上。
controller和directive都会引用到scope,但又不完全雷同。这个安排的好处是将controller从directive或者从DOM处隔离开来。这将使得controller和view无关,而这将大大增强应用的可测试性。
<div ng-controller="MyController">
Your name:
<input type="text" ng-model="username">
<button ng-click='sayHello()'>greet</button>
<hr>
{{greeting}}
</div>
angular.module('scopeExample', [])
.controller('MyController', ['$scope', function($scope) {
$scope.username = 'World'; $scope.sayHello = function() {
$scope.greeting = 'Hello ' + $scope.username + '!';
};
}]);
在上面的例子中,MyController给scope对象的username属性赋值为World。然后scope对象将通知和username绑定的input元素,它会将username的值渲染出来。这演示了controller如何能够向scope对象写一个属性。
类似的,controller可以向scope来赋值一个sayHello方法,这个方法将在用户点击greet button时被调用。sayHello方法然后读取username属性并且创建一个greeting属性。这又演示了scope的属性当他们被绑定给input widgets时将随着用户的输入自动更新
逻辑上说:{{greeting}}的渲染包含:
获取template中{{greeting}}的定义所在的DOM节点相关联的scope对象。在这个例子中,这个scope是和传递给MyController相同的scope;
在上面获取到的scope上下文中,Evaluate {{greeting}}表达式,并且将其值赋值给enclosing DOM element的text节点
你可以把scope和它的属性想象成用于渲染视图的数据。scope是所有视图相关的唯一数据源。
另外,从测试的角度说,控制器和视图分离是有必要的,因为它允许我们在不用关心渲染细节的基础上做好测试。
scope层次关系
每一个angular的应用程序只有一个root scope,但是可能有多个子scope
应用程序可以有多个scope,因为一些directive会创建新的子scope。当新的scope被创建时,他们被添加为它的父scope的子孙。这样就创建了一个和他们所相关的DOM平行的树型结构
当angular evaluate {{name}}时,它首先查看和相关html元素相关联的元素是否有name属性。如果没有发现Name属性,它则查找parent scope直到root scope.在javascript中,这个行为被称为prototypical inheriteance,而子scope prototypically inherit from their parents.
https://docs.angularjs.org/guide/scope
angular中的scope的更多相关文章
- Angular 中得 scope 作用域梳理
$scope 的使用贯穿整个 Angular App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了 $scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 ...
- Angular中directive——scope选项与绑定策略,这个也经常迷惑的。
开门见山地说,scope:{}使指令与外界隔离开来,使其模板(template)处于non-inheriting(无继承)的状态,当然除非你在其中使用了transclude嵌入,这点之后的笔记会再详细 ...
- angular源码分析:angular中$rootscope的实现——scope的一生
在angular中,$scope是一个关键的服务,可以被注入到controller中,注入其他服务却只能是$rootscope.scope是一个概念,是一个类,而$rootscope和被注入到cont ...
- angular中的代码执行顺序和$scope.$digest();
angular中,在一个controller里$scope.whatever=function(){...} ,这样写只是在这个scope作用域里定义了一个函数,如果要执行的话还得在这个control ...
- angular 中父元素ng-repeat后子元素ng-click失效
在angular中使用ng-repeat后ng-click失效,今天在这个上面踩坑了.特此记录一下. 因为ng-repeat创造了新的SCOPE.如果要使用这个scope的话就必须使用$parent来 ...
- angular中的compile和link函数
angular中的compile和link函数 前言 这篇文章,我们将通过一个实例来了解 Angular 的 directives (指令)是如何处理的.Angular 是如何在 HTML 中找到这些 ...
- Deferred在jQuery和Angular中的使用与简单实现
Deferred在jQuery和Angular中的使用与简单实现 Deferred是在jQuery1.5版本中加入的,并且jQuery使用它完全重写了AJax,以前也只是偶尔使用.但是上次在使用Ang ...
- angular源码分析:angular中脏活累活的承担者之$interpolate
一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ...
- angular源码分析:angular中入境检察官$sce
一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...
随机推荐
- UNIX SHELL基础知识总结(二)
1. vim,vi及ex的关系 vim不需要安装,vi为ex的“Visual Mode”,Vim是vi的高级版本: 2. Unix Shell 快捷键 Ctrl+a/e将光标定位到 命令的头/尾 Ct ...
- oracle--错误笔记(一)
一,环境模拟 SQL> select status from v$instance; STATUS ------------ OPEN SQL> select * from v$backu ...
- zookeeper 选举机制 和 eruake
zookeeper简介: 在分布式环境中,多个服务之间协调一致.有提供分布式锁.服务配置.实现分布式领域CAP(consistency一致性,Availiablity高可用,patition tolr ...
- app唤起的完美解决方案,及阻止浏览器的默认弹窗行为
https://stackoverflow.com/questions/10237031/how-to-open-a-native-ios-app-from-a-web-appvar frame = ...
- Request.QueryString 的用法
比如常见的URL网页地址都有 xxx.asp?type=reLogin ?号后面的就是querystring querystring是asp中获取数据的一个方法. 那么就可以用request.qu ...
- Python数据类型(列表)
文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 列表(List) 序列是Pytho ...
- Zookeeper概念学习系列之paxos协议
不多说,直接上干货! 前言 一种最终一致的算法,paxos算法. paxos算法是由大牛lamport发明的,关于paxos算法有很多趣事.比如lamport论文最初由故事描述来引入算法,以至于那班习 ...
- python-爬虫之requests模块介绍(登陆github)
介绍 使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) 注意 requests库发送请求将网页内容下载下来以后 ...
- 禅道和JIRA大对比
转自:https://blog.csdn.net/qq_40543535/article/details/78182636?locationNum=9&fps=1 禅道和JIRA大对比 置顶 ...
- android 生成随机数
/** * 随机数.字母 工具类 * Created by admin on 2017/2/20. */ public class RandomUntil { /** * 生成 ...