我们时常会在不同controller之间进行通信,接下来就介绍三种controller之间的通信方式

一、使用$on、$emit和$broadcast进行controller通信
虽然AngularJS是不推荐使用嵌套controller的使用,但是会有场景使用到父子controller传值的情况
$on、$emit和$broadcast使得event、data在controller之间的传递变的简单。
$emit:子传父  传递event与data
$broadcast:父传子 child controller传递event与data
$on:监听或接收数据。。用于接收event与data
例子:

<body><div ng-controller="parentController"><div ng-click="parent_onclick()" style="background-color: green;">我是父亲{{parent}}</div><div ng-controller="childController"><div ng-click="child_onclick()" style="background-color: red;">我是子集{{child}}</div></div></div>
</body>
<script type="text/javascript" src="../plugins/angular/angular.js"></script>
<script type="text/javascript">var lxApp = angular.module("lxApp", []);lxApp.controller("parentController", function($scope) {$scope.$on("sendParent", function(event, data) {$scope.parent = data;});$scope.parent_onclick = function() {$scope.$broadcast('sendChild', '我给子控制器传递数据');};}).controller("childController", function($scope) {$scope.$on("sendChild", function(event, data) {$scope.child = data;});$scope.child_onclick = function() {$scope.$emit('sendParent', '我给父级传递数据');};});
</script>

你会发现点击父级的div会使用$scope.$broadcast传递'sendChild'到子集,子集也会使用$on来监听父级传递的值。熟悉一下即可使用这种传值方式。

二、使用SERVICES(服务)来实现值的传递

我们首先来创建一个module(模块)
var lxApp = angular.module("lxApp", []);

接下来创建一个新的服务,服务里面定义一个鱼的数组,然后在使用addFish 方法添加鱼

lxApp.service('lxAppService', function($rootScope) {var service = {fishs : [ {title : "鲨鱼",area : "sea"}, {title : "鲸鱼",area : "sea"} ],addFish : function(fish) {service.fishs .push(fish);}};return service;});

接下来是controller和html的创建

<div ng-controller="parentController"><div ng-click="parent_onclick()" style="background-color: green;">我要向大海添加鱼</div><div ng-controller="childController"><div ng-click="child_onclick()" style="background-color: red;">我要获得鱼</div></div></div>
 lxApp.controller("parentController", function($scope,lxAppService) {$scope.parent_onclick = function() {lxAppService.addFish({title : "海豚",area : "sea"} );alert(lxAppService.fishs);};}).controller("childController", function($scope,lxAppService) {$scope.child_onclick = function() {alert(angular.toJson(lxAppService.fishs));};}); 

展示点击父级的div调用父作用域的方法添加鱼,点击子集调用子集作用域的方法获得鱼

三、使用作用域进行controller的通信
div:

<div ng-controller="parentController"><div  style="background-color: green;">我是父级</div><div ng-controller="childController"><div ng-click="child_onclick()" style="background-color: red;">我是获得父级的名字</div></div></div>

controller:

 lxApp.controller("parentController", function($scope) {$scope.name="1212";}).controller("childController", function($scope,$rootScope) {$scope.child_onclick = function() {alert($scope.name);};}); 

效果

这里我们会看到在父级定义的name在子集里面也可以获取到,这是AngularJS作用域机制,当我们调用子集的方法打印$scope.name,这时候会一直往父级向上的作用域中到$rootScope找name,所以这时候会打印出name。
最后就是可以使用根作用域$rootScope来获取不同controller的值。

AngularJS监听数组变化

AngularJS的$location基本用法和注意事项

AngularJS 无限滚动加载数据控件 ngInfiniteScroll

AngularJS实战之ng-repeat的详细用法

ng-show和ng-if的区别和使用场景

AngularJS实战之路由ui-view传参

AngularJS实战之filter的使用二

AngularJS实战之filter的使用一

AngularJS实战之路由ui-view

转载于:https://www.cnblogs.com/baryon/p/9611421.html

AngularJS实战之Controller之间的通信相关推荐

  1. angularJS中directive与controller之间的通信

    当我们在angularJS中自定义了directive之后需要和controller进行通讯的时候,是怎么样进行通讯呢? 这里介绍3种angular自定义directive与controller通信的 ...

  2. Angularjs controller之间的通信

    刚刚看了网上的一些关于控制器之间的通信:然后结合自己项目做了一些,这里主要做的是二个同级之间的controller通信. Html: 1 <html> 2 <script src=& ...

  3. angularJS的controller之间如何正确的通信

    AngularJS中的controller是个函数,用来向视图的作用域($scope)添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为. 当我们在创建新的控制器时,angularJ ...

  4. 《AngularJS实战》——3.1 模板中的过滤器

    本节书摘来自华章出版社<AngularJS实战>一 书中的第3章,第3.1节,作者:陶国荣,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.1 模板中的过滤 ...

  5. 多个 ng-app 中 Controllers Services 之间的通信

    原文发布在个人独立博客上,链接:http://pengisgood.github.io/2016/01/31/communication-between-multiple-angular-apps/ ...

  6. linux:进程之间的通信

    ipc :进程间通信(InterProcess Communication) 1.管道 同一时间是单向的:父读子写,或父写子读  管道中的数据 ,读走就没了  参数是一个整型数的数组,数组的大小是两个 ...

  7. vue的父子组建之间的通信(-),基于props和$emit之间的传递

    对于vue而言,以为其核心思想为前端组建化.所以组建之间的通信必不可少. 相信接触过Angularjs的童鞋都知道angularjs的控制器之间的通信机制. 1:父传子:官方的$broadcast() ...

  8. 第十节:实现vue组件之间的通信

    这一节我们还是来继续介绍组件:组件之间如何通信. 第九节我们在介绍组件知识的时候,提到过组件可以接受参数props,这其实就是组件之间的一种通信方式:父组件→子组件传递数据. 父组件→子组件 那我们还 ...

  9. 《AngularJS实战》——3.2 过滤器的应用

    本节书摘来自华章出版社<AngularJS实战>一 书中的第3章,第3.2节,作者:陶国荣,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.2 过滤器的应用 ...

最新文章

  1. UI设计培训分享:ui设计师如何培养设计思维?
  2. 一文带你了解基于视觉的机器人抓取自学习(Robot Learning)
  3. vue项目中的遇错:Invalid Host header
  4. SPSS分析:Bootstrap
  5. jenkins学习笔记2-在centos中安装jenkins master测试环境
  6. python3 爬虫实例_【实战练习】Python3网络爬虫快速入门实战解析(上)
  7. Spring 配置的项目中数据库链接信息加密(详细)
  8. scp 覆盖_SCP-002 - “生活”室
  9. mysql concat键值对_mysql中concat函数实现数据库字段合并查询
  10. 采访前高级软件工程课程学员付浩同学,及Scrum总结阅读感想
  11. body-parser 是一个Http请求体解析中间件
  12. ads2011射频电路设计与仿真实例
  13. CPU_Z计算机主板性能表,只为高端玩家 七款Z97高规主板推荐
  14. 公众号话题标签怎样添加
  15. python内置函数返回元素个数_python内置函数列表(list)
  16. excel报表管理系统mysql_教育扶贫数据库管理系统下载安装|教育扶贫数据库管理系统(mysql收集excel表格)官方版下载_v1.0_9号软件下载...
  17. 【名词解释】跑步pb是什么意思?
  18. 谁说每个开发者都应该拥有一个属于自己的服务器?
  19. 用Python初学机器学习时碰见ValueError: Iterable over raw text documents expected, string object received.报错解决方法
  20. Matlab图论工具箱的命令

热门文章

  1. 随想:如果手机与手机之间具备了无线电测距测向功能
  2. 《架构师(“拥抱2015”特刊)》发布
  3. X86/ARM 模拟器
  4. SHLL脚本从1到100自加
  5. Oracle exp/imp导出导入工具的使用
  6. [IE编程] 如何获得IE版本号
  7. 【转载】不要一辈子靠技术生存
  8. RDC Lent ifm IP Analysis Exercise
  9. phd for engineering at industry
  10. 首次提出“智能经济形态”,与实体经济深度融合