我有一个处理我的应用程序菜单的服务我不想从任何控制器调用,哪里是调用我的服务的最佳位置
我的服务有一个register
方法
// sample
menuService.register({name: "Person", label: "Person", url: "/persons"});
menuService.register({name: "Company", label: "Companies", url: "/companies"});
定义为
app.service('MenuService', ['$rootScope', function($r) { /*...*/ }
注意:我的服务$rootScope.$emit
由指令监听,取决于$rootScope
和$location
答案 0 :(得分:1)
你应该使用.run
块,但要记住你不能注入.provider
来运行块
yourApp.run(function ($rootScope, $location) {
// your code goes herer
});
运行块是Angular中与main方法最接近的东西。运行块是需要运行以启动应用程序的代码。在配置完所有服务并创建注入器后执行。运行块通常包含难以进行单元测试的代码,因此应在隔离模块中声明,以便在单元测试中忽略它们。
答案 1 :(得分:0)
您可以将菜单公开为MenuService
中的模型。
app.service('MenuService', ['$rootScope', function($r) {
var svcModel = {
menus: []
};
var registerMenu = function(menu) {
svcModel.menus.push(menu);
};
/*...*/
return {
model: svcModel,
register: registerMenu
/*...*/
};
}
然后直接在指令上访问该模型:
app.directive('menuDirective', ['MenuService', function(MenuService) {
return {
/*...*/
link: function(scope, element, attrs) {
/*...*/
scope.menus = MenuService.model.menus;
}
}]);