$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的更多相关文章

  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. Android中Service和Activity之间的通信

    启动Service并传递数据进去: Android中通过Intent来启动服务会传递一个Intent过去. 可以在Intent中通过putExtra()携带数据 Intent startIntent ...

  2. SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 ||尝试在数据库 5 中提取逻辑页 (1:1640) 失败

    use test go ALTER DATABASE test SET SINGLE_USER DBCC CHECKDB (test, repair_allow_data_loss) with NO_ ...

  3. Linux编程 ---- dup函数

    dup,dup2,dup3函数       顾名思义,dup及duplicate的简写,也就是复制的意思.而事实上这几个函数的功能也确实是复制文件描述符.那为什么要复制文件描述符呢?呵呵,我认为是程序 ...

  4. 关于TortoiseGit使用的心得

    花了我一个晚上,终于弄明白为什么总是 push 失败的原因了!竟然是因为我用的是注册的用户名而不是邮箱名……囧死. 另外搞清楚了一个问题,就是 Git 和远程仓库交互有两种方式,即 https 方式和 ...

  5. sql inner join , left join, right join , union,union all 的用法和区别

    Persons 表: Id_P LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fift ...

  6. hibernate开发(2)

    1 hibernate 的缓存机制 在程序运行中,hibernate要不断访问物理数据库,为了降低访问频率,提升性能,会复制一部分数据到缓存中,使得hibernate可以从缓存中读写数据,然后在特定时 ...

  7. 如果Python中有很多换行,可以选择使用"""..."""表示多行内容

    举例:>>> print("""... ... ... ... ... ... ... ... ''')... fdfd""&quo ...

  8. 当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

    编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把 ...

  9. NC台网震相走时获取及 HYPOINVERSE 格式读取

    HYPOINVERSE格式介绍:http://www.ncedc.org/ftp/pub/doc/man5/ncsn.phase.5 获取网站: http://www.ncedc.org/ncedc/ ...

  10. linux tar命令的使用

    tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包 tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c    //打包 -x    //解压 -f    //指定文件 ...