我希望在我的应用程序中每个js控制器都可以访问这些函数。我该如何实现这一目标?

时间:2014-08-28 06:03:36

标签: 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.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();

4 个答案:

答案 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();    
});