2014-04-14 121 views
4

在我的Angular應用程序中,我有幾個我認爲應該在全局控制器中的函數。在服務器端MVC框架中,通常有一個全局控制器,所有其他控制器都可以擴展,這就是我放置這些功能的地方。我想知道是否有類似Angular的東西。AngularJS全局控制器

所以此刻我有這樣的app.js

'use strict'; 

// Declare app level module 
var app = angular.module('app', ['ngRoute']).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { 

    // Possible routes can go here 

}]); 

而這controllers.js

app.controller('DownloadsController', function ($scope) { 

}); 

我希望能夠在我的應用程序中添加下載,所以我會寫在DownloadsController中的$scope.addDownload = function() { ... }。這將工作,但是我希望能在我的應用程序,這意味着調用該函數addDownload()無論我在什麼控制器的任意位置添加下載。

我可以定義一個全局控制器持有的addDownload()功能並能夠從我的所有控制器調用該功能?

+0

這是你會用什麼的指令,或者一個供應商。 –

+0

你可以創建一個服務來重用函數並注入任何你想要的控制器...... – Senthil

+0

這就是我剛纔所說的...... :)知道你的角度。與你的角度做一個。 –

回答

10

我可以推薦幾種不同的方法。首先,即使在基於服務器端的MVC類型應用程序中,這也不是一個「全局」控制器,而是面向方面的服務......或「裝飾器」。 Angular在這方面確實沒有什麼不同,因爲您有能力用所需的功能來修飾示波器。您可用將是:

  • 創建一個下載指令
  • 創建下載提供商/服務/模型
  • 與裝飾延伸範圍的方法添加到所有的控制器

取決於您需要如何調用此功能,將決定您開發此功能的方法。最健壯和最便攜的方法是創建您自己的模塊,並註冊一個提供商,該提供商是此功能的工廠。這將讓你輕鬆地將功能集成到您選擇的任何控制器,並配置在您的模塊或應用程序的一些常用設置:

myApp.provider('download', function DownloadProvider() { 
    var configurableSetting = false; 

    this.setConfigurableSetting = function(value) { 
    configurableSetting = !!value; 
    }; 

    this.$get = ["customArgument", function addDownload(customArgument) { 

    return new Download(customArgument, configurableSetting); 
    }]; 
}); 

function Download(customArgument, configurableSetting){ 
    //download code 
    return { 
    addDownload:function(){ 
     //code for method 
    } 
    } 
} 

然後在你的控制器:

app.controller('whatever',['download',function(download){ 
     var download1 = download(); //creates a new download instance 
     download.addDownload(); //executes method available on function 

}]) 

地使用這種模式可讓您爲您新建的工廠配置提供程序,以便您可以在配置階段設置您的configurableSetting,輕鬆地在您的模塊或應用程序中添加通用功能,而無需在每次調用中明確定義它。

有關如何工作的更多詳細信息,請查看角度開發人員指南,供應商:http://docs.angularjs.org/guide/providers