Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通知有关数据接收的指令_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 通知有关数据接收的指令

Javascript 通知有关数据接收的指令,javascript,angularjs,angularjs-directive,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");

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

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? <---
      }
   };
});
正如你所看到的,它允许我显示一条加载消息,当应用程序的路径改变时显示。像这样:

加载。。。 我的问题是,我不知道如何通知指令以使其消失

假设路由/列表/与ListController关联。当url/list/被点击时,控制器将加载一些数据,并且只有在收到这些数据时,我才希望加载消息消失。显然,指令不知道控制器的数据何时交付,因此我的问题仍然是:


我该如何设计出一个像样的设计呢?

为了从某种程度上简化设计和结构,我要做的是将“消息传递”服务定义为角度模块的一部分来处理这个问题。无论何时发生路由更改,它都会将其最新消息设置为“Loading…”,并且当控制器完成加载时,会完成所有Ajax请求,例如,它会调用消息服务上的clear来清除所有最近的消息

在您的指令(在我的示例中是导航栏)中,您可以查看来自消息服务的最新消息,并根据最新消息更改为什么更改警报。如果为空,则清除消息,依此类推


我想这需要做更多的工作,但这样做会更加结构化和模块化。另外,由于消息服务是中心服务,它可以接受来自任意多个模块的消息。

尝试$broadcast event并在指令中捕获它