AngularJS的簡單訂閱發布模式例子

來源:互聯網
上載者:User

標籤:xxx   dex   機制   document   cas   src   blog   cli   display   

控制器之間的互動方式
廣播 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的簡單訂閱發布模式例子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.