$rootScope
参考地址 https://docs.angularjs.org/api/ng/type/$rootScope.Scope
angular 的scope一般上都是有继承关系的,也就是说可以通过原型访问到父亲属性.
原型可以参考 http://www.cnblogs.com/keatkeat/p/3896758.html
$rootScope 提过了一些方法, 当然子scope也都继承了这些方法
$rootScope.new(isolate)
isolate 是 boolean ,中文翻译是隔离 。 也就是说创建一个$scope但是不要继承父亲
这个我们在写指令的时候通常会使用上。
$watch(watchExpression, listener, [objectEquality], [deregisterNotifier])
watch 就是属性监听。第一个参数是要监听的属性名字,参数2是回调事件
一般上我们都是监听$scope上的属性,但是如果你想监听一个普通的变量,可以这么写 $scope.$watch(function(){ retrun some var },listener)
var scope = $rootScope;
scope.name = 'misko';
scope.counter = 0;
expect(scope.counter).toEqual(0);
scope.$watch('name', function(newValue, oldValue) {
if(newValue === oldValue) { //do init }
scope.counter = scope.counter + 1;
});
expect(scope.counter).toEqual(0);
scope.name = 'alibaba' //在还没有digest前,修改关注的值是没有意义的!
scope.$digest();
// the listener is always called during the first $digest loop after it was registered
expect(scope.counter).toEqual(1);
注意红色的字,监听之后的第一个digest一定会触发一次监听回调,我们可以在回调中判断来做一下初始化,只有第一次会这样,接下来只有当数据changed才会触发回调。
在还没有digest的情况下不要去修改你关注的值,那是没有效果的 ,它就好比你把这个改变值的代码写在还没有watch之前,angular的watch要配合digest才管用,这个一般js的getter setter 手法不同。
var scope = $rootScope;
scope.name = 'misko';
scope.counter = 0;
scope.$watch('name', function(newValue, oldValue) {
//newValue = ""; 这里回事 alibaba,这不是我们要的!!!
});
scope.name = 'alibaba'
scope.$digest();
第3参数是 boolean , 是说要不要使用angular.equals来进行value is_change的对比方式, 没有用过,应该是和c#差不多,就是对比object的时候是比引用还是比值。
第4参数是 function , 每次$digest(),都会触发一次,不管值有没有改变。(这个是1.3才有的)
$watchGroup(watchExpressions, listener);
多个属性监听,但是回调相同的情况下可以使用 , 参数1是 Array<String | Function>
$watchCollection(obj, listener);
这个用来监听array或者object的改变,比如 array.push ,obj["x"] = x , 添加新的属性或值的情况。
$digest()
执行脏数据监测,dirty check , angular内有很多时候都是自动执行的,manual 执行可以写 $rootScope.$digest()
$destroy();
删除$scope和其子$scope , 所有监听都会清空.
$eval([expression], [locals]);
eval 和 js 的eval 类似,是angular自己写的javascript语法解析器,很有心啊,一堆正则一堆 if else.
参数2可以让我们传入scope, 来处理表达式,返回结果.
$apply([exp])
$apply(fn) , fn 跑完会自动触发 $rootScope.$digest();
一般上我们自己管理好 $digest()就行了
$on 和 $emit
$scope 就好比 elem , 可以把 on,emit 看做是游览器的事件机制。
当你在一个上层的scope绑定了一个事件, 在子层可以调用 $emit来触发,从而传入子层的scope给父层 .
app.controller("ctrl", ["$scope", "$rootScope", function ($scope, $rootScope) {
$scope.name = "1782";
$scope.$on("wawa", function (event, x) {
alert(event.targetScope.name);
alert(event.currentScope.name);
});
}]);
app.controller('ctrl2', ["$scope", "$rootScope", function ($scope, $rootScope) {
$scope.name = "5566";
$scope.$emit("wawa");
}]);
event 是个对象,里面有 targetScope,currentScope,name(事件名字),stopPropagation 方法(调用它阻止冒泡),preventDefault 方法(调用它注重默认事情,不是很理解),
defaultPrevented - {boolean}: true if preventDefault was called. 这个也了解.
event之后的参数就是$emit时候任意传入的
$broadcast(name, args);
上层scope向子层发布事件,反向理解就可以了。
随机推荐
- Linux企业级项目实践之网络爬虫(27)——多路IO复用
与多线程和多进程相比,I/O多路复用的最大优势是系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程. 主要应用: (1)客户程序需要同时处理交互式的输入和服务器之间的网络连接 (2) ...
- linux内核链表的移植与使用
一. Linux内核链表为双向循环链表,和数据结构中所学链表类似,具体不再细讲.由于在内核中所实现的函数十分经典,所以移植出来方便后期应用程序中的使用. /********************* ...
- 《SDN核心技术剖析和实战指南》2.2OpenFlow交换机规范小结
这节的内容相当多,主要是介绍OpenFlow标准特别是流表的相关特性. 典型的OpenFlow标准由三部分组成:安全通道,流表和OpenFlow协议.注意这个标准是一份设备标准,并不单指OpenFlo ...
- 翻译brent ozar的sqlserver dba训练课程——第一章:建立数据库服务器清单
在公司里,走进销售副总裁的办公室,询问他手下有多少销售人员.不,我的意思是你并不要那么做,他们会问你销售工具为什么那么慢. 其实我的意思是,如果你能走进他的办公室问他这个问题.我敢打赌,他会马上回答 ...
- resin安装
1. 说明 Resin版本:resin-3.1.6 2. 安装jdk 安装jdk-1_5_0_09-windows-i586-p.exe程序到相应目录. (假设安装到D:\ jdk1.5.0_09) ...
- [React Testing] JSX error diffs -- expect-jsx library
When writing React component tests, it can be hard to decipher the error diffs of broken tests, sinc ...
- iOS蓝牙4.0协议简单介绍
iOS开发蓝牙4.0的框架是CoreBluetooth,本文主要介绍CoreBluetooth的使用,关于本文中的代码片段大多来自github上的一个demo,地址是myz1104/Bluetooth ...
- 利用ESLint检查代码质量
1. ESLint ESLint 是一个插件化的 javascript 代码检测工具,它可以用于检查常见的 JavaScript 代码错误,也可以进行代码风格检查,这样我们就可以根据自己的喜好指定一套 ...
- [serverlet][转载: 深入理解HTTP Session]
[serverlet][转载: 深入理解HTTP Session] 标签(空格分隔): 未分类 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...
- R语言编程艺术# 矩阵(matrix)和数组(array)
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...