我有一些在angularjs上进行重定向的函数:
$scope.a= function()
{
$location.url('/a');
return;
}
$scope.b= function()
{
$location.url('/b');
return;
}
$scope.c = function()
{
$location.url('/c');
return;
}
$scope.d= function()
{
$location.url('/d');
return;
}
$scope.e= function()
{
$location.url('/e');
return;
}
$scope.f= function()
{
$location.url('/f');
return;
}
这些已在一个控制器内声明但我希望每个其他js控制器都可以访问它。我想避免在每个其他控制器中复制和粘贴这些功能。我如何实现这一目标?
角度路线:
var hot_keys = [
['. p','a','RedirectService.a()'],
['. o','b','RedirectService.b()'],
['. i','c','RedirectService.c()'],
['. f','d','RedirectService.d()'],
['. v','e','RedirectService.e()'],
['. a','f','RedirectService.f()']
];
.when('/a', {
templateUrl: 'templates/a',
controller: 'aController',
hotkeys: hot_keys
})
如果用户按下“.a”,它应该调用RedirectService.a();
答案 0 :(得分:0)
创建redirectService
并向他注入$location
他会做重定向
将redirectService
注入需要它的控制器。
如果您需要范围,那么您可以:
1.将它们添加到rootScope
2.使用控制器继承(例如,需要它们的每个控制器将继承一个基本控制器)。
请阅读here了解详情。
答案 1 :(得分:0)
请将所有范围函数设置为rootScope函数。请检查以下代码。
$rootScope.a= function()
{
$location.url('/a');
return;
}
$rootScope.b= function()
{
$location.url('/b');
return;
}
$rootScope.c = function()
{
$location.url('/c');
return;
}
$scope.d= function()
{
$location.url('/d');
return;
}
$rootScope.e= function()
{
$location.url('/e');
return;
}
$rootScope.f= function()
{
$location.url('/f');
return;
}
答案 2 :(得分:0)
您可以创建一个服务(https://docs.angularjs.org/guide/services),该服务可以包含这些函数并注入$ location 此服务可以注入您需要的控制器中。
另一个解决方案是使用ui-router(https://github.com/angular-ui/ui-router)路由到不同的状态而不是特定的URL。
答案 3 :(得分:0)
创建服务并在任何地方重复使用
服务
var App = angular.module('App', []);
App.service(function ($location) {
return {
a: function () {
$location.url('/a'); return;
},
b: function () {
$location.url('/b'); return;
},
c: function () {
$location.url('/c'); return;
},
d: function () {
$location.url('/d'); return;
},
e: function () {
$location.url('/e'); return;
},
f: function () {
$location.url('/f'); return;
}
};
});
如何在控制器中使用
App.controller(function($scope, RedirectService){
// call function a
RedirectService.a();
});