AngularJS的简单订阅发布模式例子
控制器之间的交互方式
广播 broadcast, 发射 emit 事件
类似于 js中的事件 , 可以自己定义事件
向上传递直到 document
在AngularJs中
向上传递直到 rootScope
观察者模式, 订阅发布模式 类似于js中的事件机制
订阅者.on('xx发布博客', function([内容]){ 通知我, 接收到博客的[内容] })
发布者.emit('xxx发布博客', {内容})
优点:
业务和实际触发者分离, 代码维护性相对好
缺点:
代码复杂性更高
AngularJs
$emit, $broadcast, $on
$emit: 向上发布事件, 类似于冒泡原理
$broadcast: 向下发布事件, 类似于捕获原理
scope.$broadcast/$emit('发布的主题', 携带的数据/内容, ...);
$on: 监听某个事件(主题)
scope.$on('监听的主题', 主题触发时的行为function(主题的事件对象event, 传递的参数1, 传递的参数2, ..){})
该例子就是 :点击button 添加一个 box, 点击单个box 又 删除到该box;
点击button时候 用$broadcast函数广播一个broadcast事件,在子控制器里 利用$on函数接收广播到的事件,进行添加;
点击box时候 用$emit向上发射一个事件 在父控制器里用$on接收该事件
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Title</title>
<style>
.box {
width: 80px;
height: 80px;
border-radius: 5px;
border: 1px solid #cccccc; margin: -1px 0 0 -1px;
display: inline-block;
}
</style>
<script src = "angular.js"></script>
</head>
<body ng-app = "app" ng-controller = "ctrl"> <button ng-click = "broadcast()">添加</button> <div class = "out" ng-controller="ctrl1" ng-click="remove()"> <div data-index="{{$index}}" class = "box" ng-repeat="i in arr track by $index" ng-style="{background:i}" ng-click="emit($index)"> </div> </div>
<script>
var app = angular.module('app', []);
var arr = [color()];
function color() {
var col = 'rgb(';
var radomCol1 = Math.floor(Math.random() * 256);
var radomCol2 = Math.floor(Math.random() * 256);
var radomCol3 = Math.floor(Math.random() * 256);
col += radomCol1 + ',' + radomCol2 + ',' + radomCol3 + ')';
return col;
} app.controller('ctrl', ['$scope', function (s) { s.arr=arr;
s.broadcast =function () {
s.$broadcast('addBox',{color:color()});
} ;
s.$on('removeBox',function (event,data) {
var index = data.index; arr.splice(index,1);
}); }]);
app.controller('ctrl1',['$scope',function (s) { s.$on('addBox',function (event,data) { // console.log(data);
arr.push(data.color);
});
s.emit=function (i) {
s.$emit('removeBox',{index:i});
}; }]); </script>
</body>
</html>
AngularJS的简单订阅发布模式例子的更多相关文章
- Publisher/Subscriber 订阅-发布模式
Publisher/Subscriber 订阅-发布模式 本博后续将陆续整理这些年做的一些预研demo,及一些前沿技术的研究,与大家共研技术,共同进步. 关于发布订阅有很多种实现方式,下面主要介绍WC ...
- 设计模式---订阅发布模式(Subscribe/Publish)
设计模式---订阅发布模式(Subscribe/Publish) 订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象.这个主题对象在自身状态变化时,会通知所有订阅者对象,使 ...
- RabbitMQ下的生产消费者模式与订阅发布模式
所谓模式,就是在某种场景下,一类问题及其解决方案的总结归纳.生产消费者模式与订阅发布模式是使用消息中间件时常用的两种模式,用于功能解耦和分布式系统间的消息通信,以下面两种场景为例: 数据接入 假设 ...
- Kafka下的生产消费者模式与订阅发布模式
原文:https://blog.csdn.net/zwgdft/article/details/54633105 在RabbitMQ下的生产消费者模式与订阅发布模式一文中,笔者以“数据接入”和“事 ...
- js设计模式之代理模式以及订阅发布模式
为啥将两种模式放在一起呢?因为这样文章比较长啊. 写博客的目的我觉得首要目的是整理自己的知识点,进而优化个人所得知识体系.知识成为个人的知识,就在于能够用自己的话表达同一种意义. 本文是设计模式系列文 ...
- saltstack系列(三)——zmq订阅/发布模式
zmq订阅发布模式 server端代码: #coding=utf-8 ''''' 服务端,发布模式 ''' import zmq from random import randrange contex ...
- ionic2踩坑之订阅发布模式的实现
原文地址:http://www.cnblogs.com/eccainiao/p/6429536.html 转载请说明. 在ionic2中实现订阅发布模式,需要用到Events. Events下面有三个 ...
- 订阅发布模式eventEmiter
// 订阅发布模式 class EventEmitter { constructor() { this._events = {}; } on(name, callback) { if (this._e ...
- Java里观察者模式(订阅发布模式)
创建主题(Subject)接口 创建订阅者(Observer)接口 实现主题 实现观察者 测试 总结 在公司开发项目,如果碰到一些在特定条件下触发某些逻辑操作的功能的实现基本上都是用的定时器 比如用户 ...
随机推荐
- js 转义
1. JavaScript 特殊字符 2. 正反斜杠互相替换 'a/b/c'.replace(/\//g,'\\') // "a\b\c" $0.value.repla ...
- 深入Animation,在SurfaceView中照样使用Android—Tween Animation!
第一类:Frame By Frame 帧动画( 不推荐游戏开发中使用) 所谓帧动画,就是顺序播放事先做好的图像,类似于放电影: 分析: 此种方式类似我之 ...
- sublime text注册码与快捷键
其他版本: —– BEGIN LICENSE —– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 ...
- 动态规划-Largest Sum of Averages
2018-07-12 23:21:53 问题描述: 问题求解: dp[i][j] : 以ai结尾的分j个部分得到的最大值 dp[i][j] = max{dp[k][j - 1] + (ak+1 + . ...
- [.NET开发] C#面向服务WebService从入门到精通
C#面向服务WebService从入门到精通>包含以下两个部分: 一.<C#远程调用技术WebService修炼手册[基础篇]> 本次分享课您将学习到以下干货知识点: 1).WebS ...
- English trip -- VC(情景课) 8 B job duties 工作职责
Vocabulary focus 核心词汇 She is a receptionist. She answers the phone. She is a cashier She counts mon ...
- ps命令各个内容信息详解
USER 用户名 PID 进程ID(Process ID) %CPU 进程的cpu占用率 %MEM 进程的内存占用率 VSZ 进程所使用的虚存的大小(Vi ...
- jquery添加类
一.addClass() 方法向被选元素添加一个或多个类. 1.对P元素添加一个intro类.<!DOCTYPE html><html><head lang=" ...
- c# 如何将字符串中用","分开的数字分别存入数组中
string[] str="1,2,3,11,12,13".Split(',');
- json 的样式与应用 - C#/.NET
本文采用问答的方式来写 问题一:什么是 json ? json是一种轻量级的数据交换格式,非常适合服务器与JavaScript交互.(它和XML一样,都是用来处理交互数据的) 问题二:json 长什么 ...