$scope:

  1. var myapp = angular.module('myapp', []);
  2. myapp
  3.  
  4. .controller('parent', function ($scope,$timeout) {
  5.  
  6. $scope.$broadcast('you');//已经发出广播
  7.  
  8. $scope.$on('you', function (event) {
  9.  
  10. console.log(event);//广播已经发出才进行监听,所以不会执行这一行
  11.  
  12. });
  13.  
  14. })
  15. .controller('child', function ($scope) {
  16.  
  17. $scope.$on('you', function (event) {
  18.  
  19. console.log(event);//同样不会执行
  20.  
  21. });
  22.  
  23. })
  1. <div ng-controller="parent">
  2.  
  3. <div ng-controller="middle">
  4.  
  5. <div ng-controller="child"></div>
  6.  
  7. </div>
  8.  
  9. </div>
  1. var myapp = angular.module('myapp', []);
  2.  
  3. myapp
  4.  
  5. .controller('parent', function ($scope, $timeout) {
  6.  
  7. var myevent=$scope.$on('you', function (event, data) {
  8.  
  9. console.log(event); //不会接收到通知
  10. console.log(data);  //不会接收到通知
  11.  
  12. });
  1.  //myevent()可取消监听
  1. })
  2.  
  3. .controller('middle', function ($scope, $timeout) {
  4.  
  5.   $scope.$on('you', function (event, data) {
      event.stopPropagation();
  6.  
  7.   console.log(event); //event对象
  8.  
  9.   console.log(data);  //'hello' });
  10.  
  11.   $scope.$on('you', function (event, data) {
  12.  
  13.   console.log(event); //虽然已经调用了stopPropagation,但由于是在同一个scope内,所以仍然event对象
  14.  
  15.   console.log(data);  //'hello'
  16.  
  17.   });
  1. })
  1. .controller('child', function ($scope) {
  2.  
  3.   $scope.$on('you', function (event, data) {
  4.  
  5.   console.log(event); //event对象
      
      console.log(data); //'hello' });
  6.  
  7.   $scope.$emit('you', 'hello'); //会返回一个event对象
    })

stopPropagation只针对$emit, 如果使用$scope.$broadcast(‘you’) 给you事件发送广播,那么event对象里就不会有stopPropagation方法,即使在子scope再使用$scope.$emit(‘you’)发送消息,调用该方法仍然报错。

$destroy:

  1. var onTimeout = function() {
  2.  
  3. $scope.value += 1;
  4. timer = $timeout(onTimeout, 1000);
  5.  
  6. };
  7.  
  8. var timer = $timeout(onTimeout, 1000);
  9.  
  10. $scope.value = 0;

$new (new,parent):  传入new会创建隔离作用域(isolate scope)??parent

  1. .controller('parent', function ($rootScope, $scope) {
  2.  
  3. var child1 = $scope.$new();
  4.  
  5. var child2 = child1.$new();
  6.  
  7. $scope.a = 0;
  8.  
  9. child1.a = 10;
  10.  
  11. console.log(child2.a); //
  12.  
  13. child2.$watch("a", function (newValue) {
  14.  
  15. console.log(newValue); //执行change后
  16.  
  17. });
  18.  
  19. $scope.change = function () {
  20.  
  21. child2.a++;
  22.  
  23. console.log(child1.a); //
  24.  
  25. };
  26.  
  27. })

$watch ( 'val', function ( newval, oldval, scope){ },boolean),

$watchGroup ( [ 'str1', 'str2' ] ,function ( newval, oldval, scope ))

$watchCollection ( obj ,function ( newval, oldval, scope ))

  $watch 一般用来监听基本类型,监听对象时除非对象完全改变,也就是地址值发生改变,否则监听不到

  $watchGroup会为数组中的每个变量添加一个$watch, 但只能浅监听,无法监听对象属性的改变,该属性主要是用来一次性为多个值添加浅监听

  1. .controller('parent', function ($rootScope, $scope, $timeout) {
  2.  
  3. $scope.one = {a: 1};
  4.  
  5. $scope.two = {b: 2};
  6.  
  7. $scope.th3 = {c: 3};
  8.  
  9. $scope.arr = ['one', 'two'],
  10. $scope.$watchGroup($scope.arr, function (newval, oldval) {
        //一旦监听某个数组,该数组就会被锁定,对该数组无论做任何修改都不会改变监控的对象
  1.     console.log('hi');
  2.  
  3. })
  4.  
  5. $scope.change = function () {
  6.  
  7. $scope.arr[2] = 'th3';
  8.  
  9. $scope.th3 = {}; //不起作用
  10.  
  11. }
  12.  
  13. $scope.change2 = function () {
  14.  
  15. $scope.two = {};
  16.  
  17. }
  18.  
  19. })

   

  1. .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: 为对象或数组的属性添加浅监听,也就是只监听对象的一个层级

  1. .controller('parent', function ($rootScope, $scope, $timeout) {
  2.  
  3. $scope.one = {a: {aa: 1}};
  4.  
  5. $scope.$watchCollection('one', function (newval, oldval) {
  6.  
  7. console.log('hi');
  8.  
  9. });
  10.  
  11. $scope.change = function () {
  12.  
  13. $scope.one.a.aa = 2; //不能监听到
  14.  
  15. $scope.one.a = 3; //可以监听
  16.  
  17. }
  18.  
  19. })

$apply,$digest

  1. .controller('parent', function ($rootScope, $scope, $timeout) {
  2.  
  3. $scope.a = 1;
  4.  
  5. setTimeout(function () {
  6.  
  7. $scope.$apply(function () {
  8.  
  9. $scope.a++;
  10.  
  11. })
  12.  
  13. }, 3000)
  14.  
  15. //或者直接使用digest
  16.  
  17. setTimeout(function () {
  18.  
  19. $scope.a++;
  20.  
  21. $scope.$digest();
  22.  
  23. }, 3000)
  24.  
  25. })

$id :  $rootScope为1,然后scope按照在页面中出现的顺序以 2,3,4 依次排列

$root  指向$rootScope

$parent 指向父scope

  

Angularjs scope的更多相关文章

  1. AngularJS Scope(作用域)

    1. AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sc ...

  2. AngularJS学习之旅—AngularJS Scope作用域(五)

    1.AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sco ...

  3. angularjs $scope.$apply 方法详解

    myApp.controller('firstController',function($scope,$interval){ $scope.date = new Date(); setInterval ...

  4. Angularjs Scope 原型链

    我们知道scope是可以继承的.scope的继承和js原型链是同一个概念. <div ng-controller="parentCtrl"> {{name}} < ...

  5. AngularJS–Scope(作用域)

    点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ Scope Scope 是一个应用程序的模块的对象.它是表达式的执行上下文.它充斥在DO ...

  6. AngularJS $scope 继承性 作用 生命周期

    一.基本概念 作用域是一个指向应用模型的对象,相当于MVVM中的ViewModel,能绑定数据(属性)和行为(方法),能监控表达式和传递事件,是实现双向绑定的基础,是应用在 HTML (视图) 和 J ...

  7. [AngularJS] $scope.$watch

    /** * Created by Answer1215 on 11/13/2014. */ function MainCtrl($scope){ function isLongEnough (pwd) ...

  8. angularjs $scope与this的区别,controller as vm有何含义?

     壹 ❀ 引 初学angularjs的同学对于$scope一定不会陌生,scope(作用域)是将view(视图)与model(模板)关联起来的桥梁,通过controller(控制器)对于model的数 ...

  9. angularjs $scope.$watch(),监听值得变化

    myApp.controller('firstController',function($scope,$interval){ $scope.date = new Date(); setInterval ...

随机推荐

  1. VS+VAssistX自动添加注释

    在VC6.0里边,C++函数头注释是使用一个宏完成的,VS系列中C#在函数头输入三个反斜杠也会自动生成XML格式的函数头注释. 又懒得在VS2008中写类似于添加函数头的注释,只能依靠一些工具了,今天 ...

  2. OC基础--类的本质

    类的本质: 类的本质其实也是一个对象(类对象),只要有了类对象, 将来就可以通过类对象来创建实例对象 程序中第一次使用该类的时候被创建,在整个程序中只有一份.此后每次使用都是这个类对象,它在程序运行时 ...

  3. 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 ...

  4. OpenCV中的矩阵操作

    函数 Description 说明 cvAdd Elementwise addition of two arrays 两个数组对应元素的和 cvAddS Elementwise addition of ...

  5. C#遍历XML文件动态加载菜单

    通过遍历XML文件动态加载菜单,顺便利用WebBrowser控件实现一个简单的桌面浏览器 效果如下: 代码如下: XMLFile1.xml <?xml version="1.0&quo ...

  6. Informatica相同环境与不同环境的导入导出( Repository Name,Integration Service Name,Folder Name是否相同):

    Informatica相同环境与不同环境的导入导出( Repository Name,Integration Service Name,Folder Name是否相同): 1.repository N ...

  7. Ibatis动态拼装sql,常用标签总结及举栗子。

    今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ib ...

  8. IELTS - Word List 28

    1, The lawsuit is very much o the lawyer's mind. 2, The canteen was absolutely packed. 3, Doctors di ...

  9. iscroll修改

    近期项目中使用iScroll遇到一个问题,在设定wrapper为横向滚动时,如果你手指放在该区域,将无法拉动页面,也就是说该区域取消了默认事件.这个体验是实在是无法接受,特别是页面中有多个横向滚动区域 ...

  10. C++中const关键字的使用总结

    C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...