Angular中$broadcast和$emit的使用方法详解
发布时间 - 2026-01-11 01:13:49 点击率:次要在控制器之间传递变量变化需要使用angular中的$broadcast和$emit方法来传递,同时使用$on来接收事件并作出响应。

broadcast译为广播,即上级传递下级。
示例代码:
<script src="../angular.js"></script>
<script>
angular.module("app", [])
.controller("child", function($scope) {
$scope.$on("parentChange", function(e, m) {
$scope.change = "changed";
$scope.child = m;
})
})
.controller("parent", function($scope) {
$scope.$watch("parent", function(n, o) {
if (n == o) {
return;
}
$scope.$broadcast("parentChange", n)
})
})
</script>
<body>
<div ng-controller="parent">
Parent: {{parent}}
<input type="text" ng-model="parent">
<div ng-controller="child">
{{change}} Child: {{child}}
</div>
</div>
</body>
上述代码使用$watch监听parent的值的变化,当发生变化时就会“广播”出parentChange事件并传递了参数(输入框的值),此时子元素作用域中使用了$scope.$on("parentChange, handler)" 来接收parentChange事件,然后接受输入框的值并赋值给子作用域中的child变量。 这样就完成了值的传递。
效果:
emit译为发射,即下级传递上级。
示例代码:
<script src="../angular.js"></script>
<script>
angular.module("app", [])
.controller("parent", function($scope) {
$scope.$on("childChange", function(e, m) {
$scope.change = "changed";
$scope.parent = m
})
})
.controller("child", function($scope) {
$scope.$watch("child", function(n, o) {
if (n == o) {
return;
}
$scope.$emit("childChange", n)
})
})
</script>
<body ng-controller="parent">
{{change}} Parent: {{parent}}
<div ng-controller="child">
Child: {{child}}
<input type="text" ng-model="child">
</div>
</body>
当子元素的child值发生变化时,会向上级发出childChange事件,此时父元素正在监听的$on(“childChange”)会做出响应,将传递的参数赋值给parent,整个流程与 broadcast类似。
效果:
上述作用域均存在层级关系,如果对于同级的作用域该如何做呢?
我们可以使用服务来广播事件:
<script src="../angular.js"></script>
<script>
angular.module("app", [])
.service("myServive", function($rootScope) {
return {
change: function(n) {
$rootScope.$broadcast("valueChange", n);
}
}
})
.controller("bro1", function($scope, myServive) {
$scope.$watch("value1", function(n) {
myServive.change(n);
})
$scope.$on("valueChange", function(e, m) {
console.log("value1");
$scope.value1 = m;
})
})
.controller("bro2", function($scope, myServive) {
$scope.$watch("value2", function(n) {
myServive.change(n);
})
$scope.$on("valueChange", function(e, m) {
console.log("value2");
$scope.value2 = m;
})
})
</script>
<body>
<div ng-controller="bro1">
<h3> value1:</h3>
<input type="text" ng-model="value1">
</div>
<div ng-controller="bro2">
<h3>value2:</h3>
<input type="text" ng-model="value2">
</div>
</body>
我们在服务中运用了$rootScope,所有的作用域都从属于它,基于这点,我们可以在根作用域中广播事件,$rootScope.$broadcast("valueChange", n);,当每个子作用域中的值发生变化时我们都会调用服务中的change 方法来广播这个事件,同时每个作用域又都在监听$on("valueChange") 事件并作出相应处理,这样就实现了子作用域中的值会传递给兄弟作用域了。
效果为:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# emit
# broadcast
# angular
# AngularJS $on、$emit和$broadcast的使用
# Angularjs中的事件广播 —全面解析$broadcast
# $emit
# $on
# 方法来
# 输入框
# 译为
# 要在
# 我们可以
# 可以使用
# 时就
# 大家多多
# 会向
# 如何做
# 运用了
# 又都
# 实现了
# 完成了
# 使用了
# 从属于
# child
# app
# module
# controller
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
历史网站制作软件,华为如何找回被删除的网站?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
简历在线制作网站免费版,如何创建个人简历?
Java遍历集合的三种方式
如何用美橙互联一键搭建多站合一网站?
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
如何用AI帮你把自己的生活经历写成一个有趣的故事?
进行网站优化必须要坚持的四大原则
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
如何在阿里云服务器自主搭建网站?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何快速搭建高效可靠的建站解决方案?
Laravel如何使用Blade组件和插槽?(Component代码示例)
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
如何在搬瓦工VPS快速搭建网站?
Laravel如何自定义错误页面(404, 500)?(代码示例)
如何为不同团队 ID 动态生成多个非值班状态按钮
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
如何快速使用云服务器搭建个人网站?
iOS发送验证码倒计时应用
如何在云指建站中生成FTP站点?
微信小程序 input输入框控件详解及实例(多种示例)
如何快速配置高效服务器建站软件?
Android自定义listview布局实现上拉加载下拉刷新功能
焦点电影公司作品,电影焦点结局是什么?
java中使用zxing批量生成二维码立牌
JavaScript常见的五种数组去重的方式
javascript中闭包概念与用法深入理解
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel怎么为数据库表字段添加索引以优化查询
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何在万网开始建站?分步指南解析
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成

