Angularjs scope
$scope:
var myapp = angular.module('myapp', []);
myapp .controller('parent', function ($scope,$timeout) { $scope.$broadcast('you');//已经发出广播 $scope.$on('you', function (event) { console.log(event);//广播已经发出才进行监听,所以不会执行这一行 }); })
.controller('child', function ($scope) { $scope.$on('you', function (event) { console.log(event);//同样不会执行 }); })
<div ng-controller="parent"> <div ng-controller="middle"> <div ng-controller="child"></div> </div> </div>
var myapp = angular.module('myapp', []); myapp .controller('parent', function ($scope, $timeout) { var myevent=$scope.$on('you', function (event, data) { console.log(event); //不会接收到通知
console.log(data); //不会接收到通知 });
//myevent()可取消监听
}) .controller('middle', function ($scope, $timeout) { $scope.$on('you', function (event, data) {
event.stopPropagation(); console.log(event); //event对象 console.log(data); //'hello' }); $scope.$on('you', function (event, data) { console.log(event); //虽然已经调用了stopPropagation,但由于是在同一个scope内,所以仍然event对象 console.log(data); //'hello' });
})
.controller('child', function ($scope) { $scope.$on('you', function (event, data) { console.log(event); //event对象
console.log(data); //'hello' }); $scope.$emit('you', 'hello'); //会返回一个event对象
})
stopPropagation只针对$emit, 如果使用$scope.$broadcast(‘you’) 给you事件发送广播,那么event对象里就不会有stopPropagation方法,即使在子scope再使用$scope.$emit(‘you’)发送消息,调用该方法仍然报错。
$destroy:
var onTimeout = function() { $scope.value += 1;
timer = $timeout(onTimeout, 1000); }; var timer = $timeout(onTimeout, 1000); $scope.value = 0;
$new (new,parent): 传入new会创建隔离作用域(isolate scope)??parent
.controller('parent', function ($rootScope, $scope) { var child1 = $scope.$new(); var child2 = child1.$new(); $scope.a = 0; child1.a = 10; console.log(child2.a); // child2.$watch("a", function (newValue) { console.log(newValue); //执行change后 }); $scope.change = function () { child2.a++; console.log(child1.a); // }; })
$watch ( 'val', function ( newval, oldval, scope){ },boolean),
$watchGroup ( [ 'str1', 'str2' ] ,function ( newval, oldval, scope ))
$watchCollection ( obj ,function ( newval, oldval, scope ))
$watch 一般用来监听基本类型,监听对象时除非对象完全改变,也就是地址值发生改变,否则监听不到
$watchGroup会为数组中的每个变量添加一个$watch, 但只能浅监听,无法监听对象属性的改变,该属性主要是用来一次性为多个值添加浅监听
.controller('parent', function ($rootScope, $scope, $timeout) { $scope.one = {a: 1}; $scope.two = {b: 2}; $scope.th3 = {c: 3}; $scope.arr = ['one', 'two'],
$scope.$watchGroup($scope.arr, function (newval, oldval) {
//一旦监听某个数组,该数组就会被锁定,对该数组无论做任何修改都不会改变监控的对象
console.log('hi'); }) $scope.change = function () { $scope.arr[2] = 'th3'; $scope.th3 = {}; //不起作用 } $scope.change2 = function () { $scope.two = {}; } })
.controller('parent', function ($rootScope, $scope, $timeout) {
$scope.a=1;
$scope.b=2;
var cal=function(scope){
return scope.a;
}
$scope.$watchGroup([cal],function(newval){
console.log('hi');
})
$scope.change=function(){
$scope.a++;
}
})
$watchCollection: 为对象或数组的属性添加浅监听,也就是只监听对象的一个层级
.controller('parent', function ($rootScope, $scope, $timeout) { $scope.one = {a: {aa: 1}}; $scope.$watchCollection('one', function (newval, oldval) { console.log('hi'); }); $scope.change = function () { $scope.one.a.aa = 2; //不能监听到 $scope.one.a = 3; //可以监听 } })
$apply,$digest
.controller('parent', function ($rootScope, $scope, $timeout) { $scope.a = 1; setTimeout(function () { $scope.$apply(function () { $scope.a++; }) }, 3000) //或者直接使用digest setTimeout(function () { $scope.a++; $scope.$digest(); }, 3000) })
$id : $rootScope为1,然后scope按照在页面中出现的顺序以 2,3,4 依次排列
$root 指向$rootScope
$parent 指向父scope
Angularjs scope的更多相关文章
- AngularJS Scope(作用域)
1. AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sc ...
- AngularJS学习之旅—AngularJS Scope作用域(五)
1.AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sco ...
- angularjs $scope.$apply 方法详解
myApp.controller('firstController',function($scope,$interval){ $scope.date = new Date(); setInterval ...
- Angularjs Scope 原型链
我们知道scope是可以继承的.scope的继承和js原型链是同一个概念. <div ng-controller="parentCtrl"> {{name}} < ...
- AngularJS–Scope(作用域)
点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ Scope Scope 是一个应用程序的模块的对象.它是表达式的执行上下文.它充斥在DO ...
- AngularJS $scope 继承性 作用 生命周期
一.基本概念 作用域是一个指向应用模型的对象,相当于MVVM中的ViewModel,能绑定数据(属性)和行为(方法),能监控表达式和传递事件,是实现双向绑定的基础,是应用在 HTML (视图) 和 J ...
- [AngularJS] $scope.$watch
/** * Created by Answer1215 on 11/13/2014. */ function MainCtrl($scope){ function isLongEnough (pwd) ...
- angularjs $scope与this的区别,controller as vm有何含义?
壹 ❀ 引 初学angularjs的同学对于$scope一定不会陌生,scope(作用域)是将view(视图)与model(模板)关联起来的桥梁,通过controller(控制器)对于model的数 ...
- angularjs $scope.$watch(),监听值得变化
myApp.controller('firstController',function($scope,$interval){ $scope.date = new Date(); setInterval ...
随机推荐
- ssh 整合
1. 加入 Spring 1). 加入 jar 包 2). 配置 web.xml 文件 3). 加入 Spring 的配置文件. 2. 加入 Hibernate 1). 同时建立持久化类, 和其对应的 ...
- Java接口中的方法
接口中可以含有变量和方法.但是,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法 ...
- canvas 的一些效果
<html> <head> <style> *{ margin: 0; padding: 0; } body{ background:green; } #div{ ...
- 009-Scala的内部类实战详解
009-Scala的内部类实战详解 Scala内部类详解 与java的区别 java的内部类是从属于外部类的 Scala的内部类是从属于对象的 内部类在调用方法的时候传递的内部类只能是由自己本身 欢迎 ...
- NASAL脚本实现的高精度定时器
#timer thread #-------以下:用户禁止访问------- #定时器属性 var TimerHash = { #定时间隔 time : , #触发函数 trigFunc : nil, ...
- 探索javascript----事件对象下的各种X和Y
每次用到诸如client,screen,offset等,虽然通常都是能用对的,但是总觉得不是那么的自信没错.所以整理一下可以再需要的时候来查阅. 一:clientX和clientY,screenX和s ...
- Android:Layout_weight的深刻理解
最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出 ...
- SQL联合查询(内联、左联、右联、全联)的语法
联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer join .右联right outer join .全联full outer join 的好处及用法. 联 ...
- MFC之TreeCtrl控件使用经验总结
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点.MFC中使用CTreeCtrl类来封装树形控件的各种操作.通过调用BOOL ...
- TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具
在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多. 除了netperf以外. 还有很多其它的网络性能测试工具. 如db, ...