本文主要的介紹了關於angularjs事件發布的詳情,你想要知道更多嗎?趕快來看看吧,現在我們一起來閱讀本篇文章吧
未讀訊息提醒:
當器具使用者或技術機構對非強檢器具檢校申請發布新的意見時,需要對對方進行訊息通知。後台很簡單,本文主要解決前台遇到的問題。
歷史遺留
這是我的訊息遺留下來的統計未讀訊息的指令,用到了快取 superCache
。
一眼看去應該可以發現這個if...else
的問題,第一次請求,將資料放到快取裡,之後就一直從快取中取了,這肯定有問題啊!原來有1
一條訊息,然後點選查看,然後這個指令仍然是從快取中取的數據,還顯示一條。
angular.module('webappApp') .directive('yunzhiUnReadMessageCount', function(ToMessageService, superCache) { return { template: '', restrict: 'E', // 元素 link: function postLink(scope, element) { // 判断缓存中是否存在未读消息数量 if (typeof superCache.get('unReadMessageCount') === 'undefined') { // 获取当前用户的所有未读收件消息 ToMessageService.pageReceiveUnReadMessageOfCurrentUser(undefined, function(data) { // 存入缓存 superCache.put('unReadMessageCount', data.totalElements); // 显示文本信息 element.text(superCache.get('unReadMessageCount')); }); } else { // 显示文本信息 element.text(superCache.get('unReadMessageCount')); } } }; });
功能實作
登出時清除快取
登出時如果不清除緩存,下一個使用者登入時用的就是上一使用者留下來的緩存,造成訊息提示錯誤。
閱讀時重新執行指令
下圖就是該實作的困難點。
該用戶有一條未讀訊息,當用戶點擊閱讀這則訊息時,將該訊息的狀態設為已讀,然後右上角的未讀條數同時修改。但是點擊這個事件是發生在控制器中,而訊息又是一個額外的指令,兩者毫無關聯。 (想學更多就到PHP中文網angularjs參考手冊欄位學習)
AngularJS
的精髓就是Scope
,這是兩個Scope
,頁面內容是我們的控制器Scope
,右上角的訊息處是我們的未讀訊息指令Scope
。
如若是簡單的父子Scope
關係,我們可以從控制器傳參數到指令,指令watch
這個參數,根據控制器對參數的變動讓指令做出響應。但是這兩個Scope
毫無關係,我們該怎麼辦呢?
事件發布
查閱了相關資料,AngularJS
中Scope
可以發布事件。
$broadcast(name, args);
Dispatches an event name downwards to all child scopes (and their children) notifying the registered $rootScope.Scope listeners.
向下分發一個事件給他的所有子Scope
,通知已註冊的Scope
# 。
$emit(name, args);
Dispatches an event name upwards through the scope hierarchy notifying the registered $rootScope.Scope listeners.
與$broadcast
類似,只不過這個是用來向上發布事件的。
$on(name, listener);
Listens on events of a given type.
監聽一個給定類型的事件。
程式碼實作
$rootScope
考慮到這兩個控制器與指令之間Scope
的關係,無論是向上或向下可能都接收不到。
這裡直接用$rootScope
向下發布事件,保證所有Scope
都能取得到該事件。免得去考慮目前Scope
與目的Scope
之間的關係。
// 广播发布reloadMessageCount事件,重新计算未读消息数量 $rootScope.$broadcast('reloadMessageCount');
因為考慮到各個層之間的職責關係,我認為:事件發布應該方法控制器中,而不應該放在Service
中,Service
就等著被別人調用,不應該與其他文件有耦合關係,否則改起來很難改。
$on
重構指令,使用$on
監聽事件發布,執行對應的邏輯重新顯示右上角的未讀訊息數。
angular.module('webappApp') .directive('yunzhiUnReadMessageCount', function(ToMessageService, superCache) { return { template: '<b>{{ count }}</b>', restrict: 'E', // 元素 link: function postLink(scope) { var self = this; self.init = function() { self.computeMessageCount(); }; // 计算未读消息数量 self.computeMessageCount = function() { // 判断缓存中是否存在未读消息数量 if (angular.isUndefined(superCache.get('unReadMessageCount'))) { // 获取当前用户的所有未读收件消息 ToMessageService.pageReceiveUnReadMessageOfCurrentUser(undefined, function(data) { // 存入缓存 superCache.put('unReadMessageCount', data.totalElements); // 显示 scope.count = superCache.get('unReadMessageCount'); }); } else { scope.count = superCache.get('unReadMessageCount'); } }; // 处理reloadMessageCount事件的处理逻辑 scope.$on('reloadMessageCount', function() { // 清除缓存 superCache.remove('unReadMessageCount'); // 计算未读消息数量 self.computeMessageCount(); }); // 初始化 self.init(); } }; });
以上就是本篇文章的全部內容了,還想看更多就到PHP中文網angularjs學習手冊欄位中學習更多關於angularjs的相關知識。有問題的可以在下方留言提問。
【小編推薦】
angularjs濾鏡你會使用嗎?我們來看angularjs過濾器的詳細解釋
angularjs的表達式怎麼用? angularjs的表達式的使用實例
以上是AngularJS 事件發布你知道多少,現在這篇文章告訴你想要知道angularjs事件詳情的詳細內容。更多資訊請關注PHP中文網其他相關文章!
![事件 ID 4660:已删除对象 [修复]](https://img.php.cn/upload/article/000/887/227/168834320512143.png)
我们的一些读者遇到了事件ID4660。他们通常不确定该怎么做,所以我们在本指南中解释。删除对象时通常会记录事件ID4660,因此我们还将探索一些实用的方法在您的计算机上修复它。什么是事件ID4660?事件ID4660与活动目录中的对象相关,将由以下任一因素触发:对象删除–每当从ActiveDirectory中删除对象时,都会记录事件ID为4660的安全事件。手动更改–当用户或管理员手动更改对象的权限时,可能会生成事件ID4660。更改权限设置、修改访问级别或添加或删除人员或组时,可能会发生这种情

在运行iOS16或更高版本的iPhone上,您可以直接在锁定屏幕上显示即将到来的日历事件。继续阅读以了解它是如何完成的。由于表盘复杂功能,许多AppleWatch用户习惯于能够看一眼手腕来查看下一个即将到来的日历事件。随着iOS16和锁定屏幕小部件的出现,您可以直接在iPhone上查看相同的日历事件信息,甚至无需解锁设备。日历锁定屏幕小组件有两种风格,允许您跟踪下一个即将发生的事件的时间,或使用更大的小组件来显示事件名称及其时间。若要开始添加小组件,请使用面容ID或触控ID解锁iPhone,长按

当在输入框中添加值时,就会发生oninput事件。您可以尝试运行以下代码来了解如何在JavaScript中实现oninput事件-示例<!DOCTYPEhtml><html> <body> <p>Writebelow:</p> <inputtype="text"

如何在PHP项目中实现日历功能和事件提醒?在开发Web应用程序时,日历功能和事件提醒是常见的需求之一。无论是个人日程管理、团队协作,还是在线活动安排,日历功能都可以提供便捷的时间管理和事务安排。在PHP项目中实现日历功能和事件提醒可以通过以下步骤来完成。数据库设计首先,需要设计数据库表来存储日历事件的相关信息。一个简单的设计可以包含以下字段:id:事件的唯一

Javascript 是一个非常有个性的语言. 无论是从代码的组织, 还是代码的编程范式, 还是面向对象理论都独具一格. 而很早就在争论的Javascript 是不是面向对象语言这个问题, 显然已有答案. 但是, 即使 Javascript 叱咤风云二十年, 如果想要看懂 jQuery, Angularjs, 甚至是 React 等流行框架, 观看《黑马云课堂JavaScript 高级框架设计视频教程》就对了。

jQuery是一个流行的JavaScript库,可以用来简化DOM操作、事件处理、动画效果等。在web开发中,经常会遇到需要对select元素进行改变事件绑定的情况。本文将介绍如何使用jQuery实现对select元素改变事件的绑定,并提供具体的代码示例。首先,我们需要使用标签来创建一个包含选项的下拉菜单:

jquery中常用的事件有:1、window事件;2、鼠标事件,是当用户在文档上面移动或单击鼠标时而产生的事件,包括鼠标单击、移入事件、移出事件等;3、键盘事件,是用户每次按下或者释放键盘上的按键时都会产生事件,包括按下按键事件、释放按键按键等;4、表单事件,例如当元素获得焦点时会触发focus()事件,失去焦点时会触发blur()事件,表单提交时会触发submit()事件。

Vue.js是一种轻量级的JavaScript框架,具有易用、高效和灵活的特点,是目前广受欢迎的前端框架之一。在Vue.js中,input框绑定事件是一个十分常见的需求,本文将详细介绍Vue文档中的input框绑定事件。一、基础概念在Vue.js中,input框绑定事件指的是将输入框的值绑定到Vue实例的数据对象中,从而实现输入和响应的双向绑定。在Vue.j


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器