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并在指令中捕获它