Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我希望在整个应用程序中,每个js控制器都可以访问这些函数。我如何做到这一点?_Javascript_Angularjs - Fatal编程技术网

Javascript 我希望在整个应用程序中,每个js控制器都可以访问这些函数。我如何做到这一点?

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.

我有几个函数可以在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()

创建一个
重定向服务
并向他注入
$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