通知有关数据接收的指令

时间:2014-10-17 09:45:46

标签: javascript angularjs angularjs-directive

我有这个简单的角度指令:

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相关联。当url /list/被命中时,控制器将加载一些数据,并且只有在收到这些数据时我才希望加载消息消失。很明显,该指令不知道控制器的数据何时交付,所以我的问题仍然存在:

我怎么能想出一个像样的设计呢?

1 个答案:

答案 0 :(得分:0)

为了基本上简化设计并以某种方式构建它,我所做的就是拥有一个“消息传递”。服务定义为Angular模块的一部分,负责处理此问题。每当路线发生变化时,它会将其最新消息设置为“正在加载...”&#39;当控制器完成加载(例如,完成所有Ajax请求)时,它会在消息传递服务上调用clear()来清除所有最近的消息。

在您的指令(在我的情况下是导航栏)中,您可以从消息服务中查看latestMessages,并根据latestMessage更改的内容更改警报。如果是空白,则清除消息等等。

我想,还有一点工作,但它的结构和模块化程度更高。此外,由于消息传递服务是核心服务,因此它可以接受来自您想要的模块的消息。