我有这个简单的角度指令:
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/
被命中时,控制器将加载一些数据,并且只有在收到这些数据时我才希望加载消息消失。很明显,该指令不知道控制器的数据何时交付,所以我的问题仍然存在:
我怎么能想出一个像样的设计呢?
答案 0 :(得分:0)
为了基本上简化设计并以某种方式构建它,我所做的就是拥有一个“消息传递”。服务定义为Angular模块的一部分,负责处理此问题。每当路线发生变化时,它会将其最新消息设置为“正在加载...”&#39;当控制器完成加载(例如,完成所有Ajax请求)时,它会在消息传递服务上调用clear()
来清除所有最近的消息。
在您的指令(在我的情况下是导航栏)中,您可以从消息服务中查看latestMessages
,并根据latestMessage
更改的内容更改警报。如果是空白,则清除消息等等。
我想,还有一点工作,但它的结构和模块化程度更高。此外,由于消息传递服务是核心服务,因此它可以接受来自您想要的模块的消息。