Javascript 我希望在整个应用程序中,每个js控制器都可以访问这些函数。我如何做到这一点?
我有几个函数可以在angularjs上执行重定向:Javascript 我希望在整个应用程序中,每个js控制器都可以访问这些函数。我如何做到这一点?,javascript,angularjs,Javascript,Angularjs,我有几个函数可以在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.
$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() 创建一个
重定向服务
并向他注入$location
他将进行重定向。
将
重定向服务
注入需要它的控制器
如果您的范围需要它们,那么您可以:1.将它们添加到
rootScope
2.使用控制器继承(例如,每个需要它们的控制器将继承一个基本控制器)。
阅读了解更多信息。请将所有作用域函数转换为根作用域函数。请检查下面的代码
$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;
}
您可以创建一个服务(),其中可以包含这些函数,并将$location注入其中。这个服务可以被注入到你需要的控制器中
另一个解决方案是使用ui路由器()路由到不同的状态,而不是特定的URL。创建一个服务,并在任何地方重用它 服务
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();
});
在将它们转换成$rootScope函数后,我如何在其他控制器中声明它们?这是一种糟糕的方法,$rootScope不是为这样的用途而设计的,使用一个服务做到了这一点,如果我这样做,它会起作用,但我会在我的角度路由中绑定它们。请在2分钟内回答我的问题。我将进行更新。@user3278616我不确定什么是热键,如果您发送指向文档的链接,基本上我可以提供帮助,我将它们绑定到我的角路由中。如果有一种方法可以使用该服务在角路由内部调用该函数,它将非常有效。我可以使用类似于
['.p',a',RedirectService.a()']
的东西来代替['.p',a',a()']
吗?到目前为止,它还不起作用,但如果有一种方法可以从角度路由调用服务,那将是令人惊讶的。问题是,一旦我刷新,所有内容都是未绑定的(很明显),但如果有一种方法可以使用服务调用函数,这将不会是一个问题。除了在每个使用该服务的控制器内创建函数之外,我只想在每个需要使用该服务的控制器内包含该服务。@user3278616我想我明白你的意思了,而不是['.p','a','RedirectService.a()']
Do['.p','a','redirect.a()']
然后在每个控制器中,您只需要注入重定向服务,还需要定义$scope.redirect=RedirectService代码>