AngularJS的學習--$on、$emit和$broadcast的使用

來源:http://www.cnblogs.com/CraryPrimitiveMan/p/3679552.html

AngularJS中的作用域有一個非常有層次和嵌套分明的結構。其中它們都有一個主要的$rootScope(也就說對應的Angular應用或者ng-app),然后其他所有的作用域部分都是繼承自這個$rootScope的,或者說都是嵌套在主作用域下面的。很多時候,你會發現這些作用域不會共享變量或者說都不會從另一個原型繼承什么。

那么在這種情況下,如何在作用域之間通信呢?其中一個選擇就是在應用程序作用域之中創建一個單例服務,然后通過這個服務處理所有子作用域的通信。

在AngularJS中還有另外一個選擇:通過作用域中的事件處理通信。但是這種方法有一些限制;例如,你并不能廣泛的將事件傳播到所有監控的作用域中。你必須選擇是否與父級作用域或者子作用域通信。

$on、$emit和$broadcast使得event、data在controller之間的傳遞變的簡單。

  • $emit只能向parent controller傳遞event與data
  • $broadcast只能向child controller傳遞event與data
  • $on用于接收event與data

例子如下

html代碼

復制代碼
<div ng-controller="ParentCtrl">                <!--父級--><div ng-controller="SelfCtrl">              <!--自己--><a ng-click="click()">click me</a><div ng-controller="ChildCtrl"></div>   <!--子級--></div><div ng-controller="BroCtrl"></div>         <!--平級-->
</div>
復制代碼

js代碼

復制代碼
app.controller('SelfCtrl', function($scope) {$scope.click = function () {$scope.$broadcast('to-child', 'child');$scope.$emit('to-parent', 'parent');}
});app.controller('ParentCtrl', function($scope) {$scope.$on('to-parent', function(event,data) {console.log('ParentCtrl', data);       //父級能得到值});$scope.$on('to-child', function(event,data) {console.log('ParentCtrl', data);       //子級得不到值});
});app.controller('ChildCtrl', function($scope){$scope.$on('to-child', function(event,data) {console.log('ChildCtrl', data);         //子級能得到值});$scope.$on('to-parent', function(event,data) {console.log('ChildCtrl', data);         //父級得不到值});
});app.controller('BroCtrl', function($scope){  $scope.$on('to-parent', function(event,data) {  console.log('BroCtrl', data);          //平級得不到值  });  $scope.$on('to-child', function(event,data) {  console.log('BroCtrl', data);          //平級得不到值  });  
});
復制代碼

最終結果

ParentCtrl?child

ChildCtrl?parent

?

$emit和$broadcast可以傳多個參數,$on也可以接收多個參數。

?

在$on的方法中的event事件參數,其對象的屬性和方法如下

事件屬性目的
event.targetScope發出或者傳播原始事件的作用域
event.currentScope目前正在處理的事件的作用域
event.name事件名稱
event.stopPropagation()一個防止事件進一步傳播(冒泡/捕獲)的函數(這只適用于使用`$emit`發出的事件)
event.preventDefault()這個方法實際上不會做什么事,但是會設置`defaultPrevented`為true。直到事件監聽器的實現者采取行動之前它才會檢查`defaultPrevented`的值。
event.defaultPrevented如果調用了`preventDefault`則為true

?

?

?

轉載于:https://www.cnblogs.com/yansjhere/p/4044041.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277099.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277099.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

17、【 商品管理模塊開發】——后臺商品圖片的springmvc和富文本上傳以及ftp文件服務器的開發...

1、FTP文件服務器的搭建&#xff1a; 軟件下載&#xff1a;ftpserver&#xff1b; image.png瀏覽器訪問&#xff1a;ftp://127.0.0.1/image.png點擊任意一個文件&#xff0c;就可以看到我們圖片啦&#xff0c;前提是前面指定的目錄里面有圖片文件~ image.png2、接口編寫&#x…

我們常說……

從過完元旦到現在&#xff0c;乖乖在公司辦公的時間很少&#xff0c;好多時候都是在外地&#xff0c;或者是在路上、車上。有n多次&#xff0c;乖乖一天至少坐6個小時的車&#xff0c;回到家里都是帶著一身的疲憊&#xff0c;雖然他并不表現出來&#xff0c;但是因為長時間坐車…

那些油管上高質量的學習編程的頻道 之一

國內確實有很多不錯的學習編程的網站或者個人博客&#xff0c;但是對于初學者&#xff0c;往往更希望獲得那種引導性的教學&#xff1a;即一步一步的教你跟著操作的教學。這種教學最好的方式當然就是視頻了。畢竟在Apple Podcast上超火爆的斯坦福教授iOS開發的課程也是這種形式…

SQL Server 2005 Express附加(Attach)的數據庫為“只讀”的解決方法

我的操作系統為Windows 2003 Server , 文件系統NTFS, 在SQL Server 2005 Express 上附加(Attach)從另外一臺電腦Copy過來的數據庫后&#xff0c;數據庫為“只讀”。如下圖&#xff1a; 解決辦法&#xff1a; 打開 SQL Server Configuration Manager, 打開SQL Server SQLEXPRESS…

[導入]blog年終小結

1. 2006-11-30 注冊了本域名thws.cn&#xff0c;喜歡的thw.com被注冊了&#xff0c;只好退而就其次了&#xff1b;2. 12-20在alexa上登陸站點&#xff0c;綜合排名從起初490多萬上升到現在的590327,下期566,880&#xff1b;3. 2007-1-11適逢google PR更新&#xff0c;PR值從0變…

Maven學習筆記(2) --mvn archetype:create 說明

前面一篇相對比較簡單。 看完前面的內容我們會來到實戰部分&#xff0c;也就是創建一個簡單的項目 1 mvn archetype:create -DgroupIdorg.sonatype.mavenbook.ch03 \ 2 -DartifactIdsimple \ 3 -DpackageNameorg.sonatype.mavenbook 于是我們得到了步入Maven領域的第一份打擊 真…

UI設計:C4D作品案例分享

中文名4D電影&#xff0c;外文名CINEMA 4D&#xff0c;研發公司為德國Maxon Computer&#xff0c;特點為極高的運算速度和強大的渲染插件&#xff0c;使用在電影《毀滅戰士》、《阿凡達》中&#xff0c;獲得貿易展中最佳產品’的稱號&#xff0c;前身為FastRay。CINEMA 4D擁有快…

又是一個人的情人節

又是一個人的情人節 上午送完弟弟返鄉的車&#xff0c;回家的心情也越來越迫切&#xff0c;很想立刻回到家里&#xff0c;和老爸老媽嘮叨嘮叨&#xff0c;和一年未見的堂兄弟一起喝喝酒&#xff0c;玩耍玩耍&#xff0c;那種心情真是沒有辦法形容&#xff0c;在我個人看來&…

C# Global.asax.cs 定時任務

定時執行更新Redis緩存操作 protected void Application_Start(object sender, EventArgs e) {Timer timer new Timer();timer.Enabled true;timer.Interval 3600000; //執行間隔時間,單位為毫秒; 這里實際間隔為1小時 timer.Start();timer.Elapsed new System.Timers.Ela…

給div拼接html 拼接字符串

簡單描述&#xff1a;拼接html 拼接字符串&#xff0c;說實話&#xff0c;拼接這種東西我自己弄&#xff0c;得花費很多時間&#xff0c;主要是轉義字符&#xff0c;單引號&#xff0c;雙引號這種小細節調整起來比較麻煩&#xff0c;一旦疏忽多了少了一個符號&#xff0c;頁面就…

P2587 [ZJOI2008]泡泡堂 神仙貪心

思路&#xff1a;貪心 提交&#xff1a;1次&#xff08;看了題解$QwQ$&#xff09; 題解&#xff1a; 若我方最弱可以干掉對方最弱&#xff0c;則干&#xff1b; 否則若我方最強可以干掉對方最強&#xff0c;則干&#xff1b; 否則若我方最弱與對方最強平手&#xff0c;則平&am…

LifeCycle源碼解讀

對于LifeCycle的簡單使用可以看上一篇文章&#xff1a;LiveDataViewModelRepository搭建MVVM 這篇文章主要是為了閱讀源碼&#xff0c;盡量深入閱讀&#xff0c;能力還是一般&#xff0c;見諒&#xff1a; LifeCycle的作用 解決onCreate等生命周期方法&#xff0c;由于各種原因…

Microsoft SQL Server 2005 Service Pack 2 已經可以下載

下載地址為http://www.microsoft.com/downloads/details.aspx?FamilyIDd07219b2-1e23-49c8-8f0c-63fa18f26d3a&DisplayLangzh-cn嘿嘿,這么快就SP2了 轉載于:https://www.cnblogs.com/lazerjulysky/archive/2007/03/04/663279.html

單點登錄(sso)入門

單點登錄的英文名叫做Single Sign On&#xff0c;簡稱SSO。 在以前&#xff0c;一般我們就單系統&#xff0c;所有的功能都在同一個系統上。 后來&#xff0c;我們為了合理利用資源和降低耦合性&#xff0c;于是把單系統拆分成多個子系統。 比如阿里系的淘寶和天貓&#xff0c;…

Cocopods的升級錯誤解決

2019獨角獸企業重金招聘Python工程師標準>>> 寫在前面&#xff1a; 這篇筆記的由來&#xff0c;是因為在這個周五下班后想起了之前 GitHub 上一個關于 iOS Charts 的 demo 仍處于未完待續的狀態。便想著完成了它&#xff0c;遂打開了該工程&#xff0c;開始用 pod 更…

XML 命名空間以及它們如何影響 XPath 和 XSLT (Extreme XML)

Dare Obasanjo Microsoft Corporation 2002 年 5 月 20 日 本文是有望長期發表的系列文章的第一篇&#xff0c;這些文章專門闡釋由 Microsoft 支持的 W3C XML 技術的更微妙的內容。盡管 XML 的核心仍相當簡單&#xff0c;但是圍繞它的技術已經變得日益復雜&#xff0c;而且其中…

帆軟報表(finereport)點擊事件對話框打開

點擊事件對話框打開iframe var iframe $("<iframe id001 name001 width100% height100% scrollingyes frameborder0>") // iframe參數的命名及寬高等iframe.attr("src", "http://192.168.100.17:8075/WebReport/ReportServer?reportlet1.cpt&…

部署虛擬環境

創建虛擬環境 導入Virtualenv虛擬環境模塊 pip install virtualenv python -m pip install virtualenv 創建虛擬環境 cd 項目文件夾 virtualenv 虛擬環境名 激活虛擬環境 cd 虛擬環境文件夾 運行 Scripts 目錄下的 activate 腳本 Scripts\activate 退出當前虛擬環境 Scripts\d…

走馬觀花:Visual Studio Code Name Orcas Mar07CTP /體驗DLINQ

不知道什么叫“Orcas”&#xff1f;簡單說應該就是下一版本的Visual Studio 吧。現在atlas&#xff0c;LINQ&#xff0c;WF之類東西&#xff0c;對于VS2005是單獨安裝的&#xff0c;Orcas應該是全內置吧。還有很多功能的增強&#xff0c;可以參考英文說明。閑話不說&#xff0c…

各種學習資源

C&#xff1a;http://huangdingjun.blog.163.com/ 網易博客 有好多關于C的博文 http://hi.baidu.com/dudiaodaoke/home獨釣刀客 vim&#xff1a;http://easwy.com/blog/ vim linux 牛人 http://www.swaroopch.com/notes/Vim_zh-cn:%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E7%BC…