文档章节

angularjs 之 $on 、 $emit 、$broadcast

安吉拉
 安吉拉
发布于 2017/08/23 17:59
字数 390
阅读 19
收藏 0

作用域之间的通信:

1.在应用程序中建一个单例服务,然后通过这个服务处理所有子作用域的通信。

2.父子作用域之间的通信可以通过$emit  $brodcast $on

<div ng-controller="ParentCtrl">                <!--父级-->
    <div ng-controller="SelfCtrl">              <!--自己-->
        <a ng-click="click()">click me</a>
        <div ng-controller="ChildCtrl"></div>   <!--子级-->
    </div>
    <div ng-controller="BroCtrl"></div>         <!--平级-->
</div>

js代码:

app.controller('SelfCtrl',function($scope){
  $scope.click=function(){
    $scope.$broadcast('to-child','child');
    $scope.$emit('to-child','parent');
   }


});

app.controller("parentCtrl",function($scope){
   $scope.$on('to-parent',function(event,data){
      console.log('PrentCtrl',data);//父级能得到值
  });
   $scope.$on('to-child',function(event,data){
     console.log('ParentCtrl',data);//子级得不到
  });

});
app.contorller('ChildCtrl',function($scope){
   $scope.$on('to-child',function(event,data){
   console.log('ChildCtrl',data); //子级能得到值
  
 });
   $scope.$on('to-parent',functoin(event,data){
     console.log('ChildCtrl',data); //父级得不到值
  });
 
 });

app.controller('BroCtrl',function($scope){
   $scope.$on('to-parent',function(event,data){
   console.log('BroCtrl',data);//平级得不到值
  });
  $scope.$on('to-child',function(event,data){
   console.log('BroCtrl',data)//平级得不到值  
 })
 })

最终结果:

ParentCtrl       parent

ChildCtrl          child

$emit $broadcast 可传多个参数,$on也可以接收多个参数

在$on的方法中的event 事件参数  ,其对象的属性和方法如下

事件属性 目的
event.targetScope
发出或者传播原始事件的作用域
event.currentScope
目前正在处理的事件的作用域
event.name
事件名称
event.stopPropagation()
一个防止事件进一步传播(冒泡/捕获)的函数(这只适用于使用`$emit`发出的事件)
event.preventDefault()
这个方法实际上不会做什么事,但是会设置`defaultPrevented`为true。直到事件监听器的实现者采取行动之前它才会检查`defaultPrevented`的值。
event.defaultPrevented
如果调用了`preventDefault`则为true

 

本文转载自:http://www.cnblogs.com/CraryPrimitiveMan/p/3679552.html

安吉拉
粉丝 1
博文 35
码字总数 7547
作品 0
私信 提问
Angular 5.0.0-beta.6 和 4.4.0-RC.0,Web 前端框架

Angular 5.0.0-beta.6 和 4.4.0 的首个 RC 版已发布,Angular 5.0.0 beta.6 是 Angular 5 的第七个 beta 版本,正式版预计 9-10 月发布。 Angular 5.0.0-beta.6 部分更新内容: Bug 修复 an...

局长
2017/09/04
1K
8
AngularJS-源码阅读(八.一)

作用域,应该说这是AngularJS的理念核心之一。这个理念包含: 全局唯一的rooScope和每个controller一个scope scope之间的联系(父子关系,同代先后关系,独立scope) 消息传递和注册($broadcas...

lost_o0
2014/04/17
55
0
OSChina 技术专题之 AngularJS 更新版(201412)

Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作。 AngularJS很小,只有60K,兼容主流浏...

OSC编辑部
2014/10/17
11.2K
26
解决Angular CLI找不到模块"angular-devkit/build-angular"的问题

Angular CLI 是 Angular 客户端命令行工具,提供非常多的命令来简化 Angular 的开发。今天执行“ng serve”命令时,竟然报找不到模块"@angular-devkit/build-angular"的错误。 问题背景 执行...

waylau
10/31
235
0
《AngularJS学习整理》系列分享专栏

《AngularJS学习整理》系列分享专栏 《AngularJS学习整理》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201748.html 文章 教你用AngularJS框架一行JS代码实现...

开元中国2015
2018/11/09
204
0

没有更多内容

加载失败,请刷新页面

加载更多

如何递归计算目录中的所有代码行?

我们有一个PHP应用程序,并希望计算特定目录及其子目录下的所有代码行。 我们不需要忽略评论,因为我们只是想弄清楚。 wc -l *.php 该命令在给定目录中运行良好,但忽略子目录。 我当时认为...

技术盛宴
37分钟前
3
0
使用 try-with-resources 优雅关闭资源

我们知道,在 Java 编程过程中,如果打开了外部资源(文件、数据库连接、网络连接等、redis),我们必须在这些外部资源使用完毕后,手动关闭它们。 因为外部资源不由 JVM 管理,无法享用 JVM ...

七弦桐
44分钟前
4
0
04.深入浅出索引(上)

简单来说,索引的出现就是为了提高数据查询效率,就像书的目录一样。 索引的常见模型 索引实现的方式有很多种,所以这里就引入了索引模型的概念,可以用于提高读写效率的数据结构很多,比较常...

scgaopan
47分钟前
5
0
Redis哨兵、复制、集群的设计原理,以及区别

谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。 **哨兵(Sentinel):**可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的...

Java阿七
57分钟前
5
0
浅析laravel路由执行原理

目前很多文章已经对Laravel的执行原理做了详细介绍,这里只是为了个人做一下简单记录 首先看入口 index.php 关键的执行函数就是 handle方法 ,但是前面的几个预处理函数,包括了整合框架的大...

冻结not
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部