本文实例讲述了AngularJS开发教程之控制器之间的通信方法。分享给大家供大家参考,具体如下:

一、指令与控制器之间通信,无非是以下几种方法:
基于scope继承的方式
基于event传播的方式
service的方式(单例模式)
二、基于scope继承的方式:
最简单的让控制器之间进行通信的方法是通过scope的继承。假设有两个控制器Parent、Child,Child 在 Parent 内,那Child 可以称为控制器Parent的子控制器,它将继承父控制器Parent的scope。这样,Child就可以访问到Parent的scope中的所有函数和变量了。
需要注意的是,由于scope的继承是基于Js的原型继承,如果变量是基本类型的,那在Child中的修改(写),有可能会导致Parent中的数据变脏。
例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>基于scope继承的方式</title>
</head>
<body ng-app = "myApp">
<div ng-controller = "parent">
<p>引用类型:{{obj.value}}</p>
<p>引用类型:{{value}}</p>
<a href="javascript:;" ng-click = "parent('parent')">点我</a>
<div ng-controller="child">
<p>引用类型:{{obj.value}}</p>
<p>引用类型:{{value}}</p>
<a href="javascript:;" ng-click = "child('child')">点我</a>
</div>
</div>
<script type="text/javascript" src='http://cdn.staticfile.org/angular.js/1.3.0-beta.13/angular.min.js'></script>
<script>
var app = angular.module("myApp",[],function(){console.log("start")});
app.controller("parent",function($scope){
$scope.parent = function(newchild){
// 这里不能都单独写成$scope.obj={value:newchild}
$scope.obj={value:newchild};
$scope.value = newchild;
}
});
app.controller("child",function($scope){
$scope.child = function(newchild){
$scope.value = newchild;
$scope.obj.value=newchild;
}
});
</script>
</body>
</html>
三、基于事件的方式:
在一般情况下基于继承的方式已经足够满足大部分情况了,但是这种方式没有实现兄弟控制器之间的通信方式,所以引出了事件的方式 。基于事件的方式中我们可以里面作用的on,on,emit,boardcast这几个方式来实现,其中boardcast这几个方式来实现,其中on表示事件监听,emit表示向父级以上的作用域触发事件,emit表示向父级以上的作用域触发事件,boardcast表示向子级以下的作用域广播事件。
子到父 通过 $emit 注册事件,例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>基于事件传播子到父</title>
</head>
<body ng-app = "myApp">
<h3>$on,$emit,$boardcast这几个方式来实现,其中$on表示事件监听,$emit表示向父级以上的 作用域触发事件, $boardcast表示向子级以下的作用域广播事件</h3>
<div ng-controller = "parent">
<p>引用类型:{{value}}</p>
<div ng-controller="child">
<a href="javascript:;" ng-click = "child('child')">子传值到父</a>
</div>
</div>
<script type="text/javascript" src='http://cdn.staticfile.org/angular.js/1.3.0-beta.13/angular.min.js'></script>
<script>
var app = angular.module("myApp",[],function(){console.log("start")});
app.controller("parent",function($scope){
$scope.$on("pfan",function(e,data){
$scope.value = data;
})
});
app.controller("child",function($scope){
$scope.child = function(newchild){
$scope.value = newchild;
$scope.$emit("pfan",$scope.value)
}
});
</script>
</body>
</html>
父到子通过$broadcast注册事件,但其实感觉有点多余,本事父就是可以共享给子的,例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>基于事件传播父到子</title>
</head>
<body ng-app = "myApp">
<h3>$on,$emit,$boardcast这几个方式来实现,其中$on表示事件监听,$emit表示向父级以上的 作用域触发事件, $boardcast表示向子级以下的作用域广播事件</h3>
基于事件传播父到子,这里本事父就可以到子,感觉有点多余
<div ng-controller = "parent">
<a href="javascript:;" ng-click = "parent('child')">子传值到父</a>
<div ng-controller="child">
<p>引用类型:{{value}}</p>
</div>
</div>
<script type="text/javascript" src='http://cdn.staticfile.org/angular.js/1.3.0-beta.13/angular.min.js'></script>
<script>
var app = angular.module("myApp",[],function(){console.log("start")});
app.controller("parent",function($scope){
$scope.parent = function(newchild){
$scope.value = newchild;
$scope.$broadcast("pfan",$scope.value)
}
});
app.controller("child",function($scope){
$scope.$on("pfan",function(e,data){
$scope.value = data;
})
});
</script>
</body>
</html>
同级之间
拥有同个父scope的子级scope之间,也就是兄弟/相邻scope之间的通信,其实是借助共同父级传递消息的:
子级scope中有谁想传消息了,emit一个给“奶爸”然后通过“奶爸”emit一个给“奶爸”然后通过“奶爸”broadcast 给所有孩子这个相同的信息,当然发出信息的那个可以选择是否要忽略掉自己发出的信息
四、angular服务的方式:
在ng中服务是一个单例,所以在服务中生成一个对象,该对象就可以利用依赖注入的方式在所有的控制器中共享。参照以下例子,在一个控制器修改了服务对象的值,在另一个控制器中获取到修改后的值:
var app = angular.module('myApp', []);
app.factory('instance', function(){
return {};
});
app.controller('MainCtrl', function($scope, instance) {
$scope.change = function() {
instance.name = $scope.test;
};
});
app.controller('sideCtrl', function($scope, instance) {
$scope.add = function() {
$scope.name = instance.name;
};
});
html:
<div ng-controller="MainCtrl">
<input type="text" ng-model="test" />
<div ng-click="change()">click me</div>
</div>
<div ng-controller="sideCtrl">
<div ng-click="add()">my name {{name}}</div>
</div>
更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS入门与进阶教程》及《AngularJS MVC架构总结》
希望本文所述对大家AngularJS程序设计有所帮助。
# AngularJS
# 控制器
# 通信
# 利用VS Code开发你的第一个AngularJS 2应用程序
# Angularjs单选改为多选的开发过程及问题解析
# AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
# 基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
# Ubuntu系统下Angularjs开发环境安装
# 总结AngularJS开发者最常犯的十个错误
# 利用Angularjs和Bootstrap前端开发案例实战
# AngularJS应用开发思维之依赖注入3
# angularJS开发注意事项
# 这几个
# 来实现
# 就可以
# 的是
# 是一个
# 进阶
# 器中
# 相关内容
# 中有
# 感兴趣
# 我们可以
# 给大家
# 可以选择
# 最简单
# 更多关于
# 它将
# 所述
# 无非是
# 需要注意
# 程序设计
相关文章:
如何快速搭建高效香港服务器网站?
如何自定义建站之星网站的导航菜单样式?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
开封网站制作公司,网络用语开封是什么意思?
,购物网站怎么盈利呢?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
linux top下的 minerd 木马清除方法
如何通过VPS搭建网站快速盈利?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何快速搭建高效简练网站?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
如何用AWS免费套餐快速搭建高效网站?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
制作网站的基本流程,设计网站的软件是什么?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
学校建站服务器如何选型才能满足性能需求?
制作营销网站公司,淘特是干什么用的?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何快速生成凡客建站的专业级图册?
已有域名和空间,如何快速搭建网站?
上海网站制作开发公司,上海买房比较好的网站有哪些?
制作网站的模板软件,网站怎么建设?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
,石家庄四十八中学官网?
制作网站的软件免费下载,免费制作app哪个平台好?
香港服务器租用费用高吗?如何避免常见误区?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
如何选择适配移动端的WAP自助建站平台?
高防服务器租用如何选择配置与防御等级?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何用PHP快速搭建高效网站?分步指南
如何快速搭建二级域名独立网站?
建站之星展会模板:智能建站与自助搭建高效解决方案
建站之星图片链接生成指南:自助建站与智能设计教程
建站主机空间推荐 高性价比配置与快速部署方案解析
香港服务器部署网站为何提示未备案?
建站之星3.0如何解决常见操作问题?
建站之星如何开启自定义404页面避免用户流失?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
网站微信制作软件,如何制作微信链接?
如何快速查询网站的真实建站时间?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何基于PHP生成高效IDC网络公司建站源码?
网站制作公司排行榜,四大门户网站排名?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
*请认真填写需求信息,我们会在24小时内与您取得联系。