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 ...
随机推荐
- VS+VAssistX自动添加注释
在VC6.0里边,C++函数头注释是使用一个宏完成的,VS系列中C#在函数头输入三个反斜杠也会自动生成XML格式的函数头注释. 又懒得在VS2008中写类似于添加函数头的注释,只能依靠一些工具了,今天 ...
- OC基础--类的本质
类的本质: 类的本质其实也是一个对象(类对象),只要有了类对象, 将来就可以通过类对象来创建实例对象 程序中第一次使用该类的时候被创建,在整个程序中只有一份.此后每次使用都是这个类对象,它在程序运行时 ...
- Work around by " Due to heavy load, the latest workflow operation has been queued. " 分类: Sharepoint 2015-07-08 00:19 3人阅读 评论(0) 收藏
I hope most of the users and developers might have come across above note and worried about it. Ther ...
- OpenCV中的矩阵操作
函数 Description 说明 cvAdd Elementwise addition of two arrays 两个数组对应元素的和 cvAddS Elementwise addition of ...
- C#遍历XML文件动态加载菜单
通过遍历XML文件动态加载菜单,顺便利用WebBrowser控件实现一个简单的桌面浏览器 效果如下: 代码如下: XMLFile1.xml <?xml version="1.0&quo ...
- Informatica相同环境与不同环境的导入导出( Repository Name,Integration Service Name,Folder Name是否相同):
Informatica相同环境与不同环境的导入导出( Repository Name,Integration Service Name,Folder Name是否相同): 1.repository N ...
- Ibatis动态拼装sql,常用标签总结及举栗子。
今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ib ...
- IELTS - Word List 28
1, The lawsuit is very much o the lawyer's mind. 2, The canteen was absolutely packed. 3, Doctors di ...
- iscroll修改
近期项目中使用iScroll遇到一个问题,在设定wrapper为横向滚动时,如果你手指放在该区域,将无法拉动页面,也就是说该区域取消了默认事件.这个体验是实在是无法接受,特别是页面中有多个横向滚动区域 ...
- C++中const关键字的使用总结
C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...