2014-10-17 78 views
0

我有這個簡單的角度指令指令:通知有關數據接收

angular.module("directives").directive("loading", function($rootScope) { 

    return { 
     link: function(scope, element, attrs) { 

     console.log("loading directive", scope, element, attrs); 

     element.addClass("hidden"); 

     $rootScope.$on("$routeChangeStart", function(event, next, current) { 
      element.removeClass("hidden"); 
     }); 

     // how do I notify data have been received in the controller? <--- 
     } 
    }; 
}); 

正如你可以看到它讓我顯示加載消息顯示時的應用改變了路線。像這樣:

加載中...

我的問題是,我不知道如何通知指令,以使其消失。

假設路徑/list/ListController關聯。當網址/list/被擊中時,控制器將加載一些數據,並且只有當接收到這樣的數據時,我希望加載消息消失。顯然,指令不知道什麼時候該控制器的數據被交付所以我的問題是:

如何赫克我拿出一個像樣的設計呢?

+2

嘗試$廣播事件,並在指令中捕獲它 – Kasyx 2014-10-17 09:46:58

回答

0

基本上簡化設計,並在某種程度上結構吧,我做的是有定義爲一個角模塊,注意到了這一問題的一部分,「信息」服務。每當路由發生變化時,它會將其最新消息設置爲「正在加載...」,當控制器完成加載(例如,完成所有Ajax請求)時,它將調用消息服務上的clear()以清除所有最近的消息。

在您的指令(在我的情況下是一個導航欄),您可以從您的消息服務中查看latestMessages,並根據latestMessage更改的內容更改警報。如果其空白,則清除消息等等。

我猜想還有一點工作,但是它的結構和模塊化程度更高。另外,由於消息服務是中心的,它可以接收來自盡可能多的模塊的消息。