gpt4 book ai didi

javascript - AngularJS 全局 Controller

转载 作者:搜寻专家 更新时间:2023-11-01 05:00:56 26 4
gpt4 key购买 nike

在我的 Angular 应用程序中,我有一些我认为应该在全局 Controller 中的功能。在服务器端 MVC 框架中,通常有一个所有其他 Controller 都扩展的全局 Controller ,这就是我放置这些函数的地方。我想知道 Angular 是否有类似的东西。

所以目前我在 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() { ... } >。这会起作用,但是我希望能够在我的应用程序中的任何位置添加下载,这意味着无论我在哪个 Controller 中,都可以调用 addDownload() 函数。

我能否定义一个包含 addDownload() 函数的全局 Controller 并能够从我的所有 Controller 调用该函数?

最佳答案

我可以推荐几种不同的方法。首先,即使在基于服务器端的 MVC 类型应用程序中,这也不是“全局” Controller ,而是面向方面的服务……或“装饰器”。 Angular 在这方面确实没有什么不同,因为您可以使用所需的功能来装饰您的范围。您的选择是:

  • 创建下载指令
  • 创建下载提供商/服务/模型
  • 使用装饰器扩展范围以将方法添加到所有 Controller

根据您需要如何调用此功能,将决定您开发此功能的方法。最健壮和可移植的方法是创建您自己的模块,并注册一个提供程序作为此功能的工厂。这将允许您轻松地将功能注入(inject)您选择的任何 Controller ,并在您的模块或应用程序中配置一些通用设置:

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
}
}
}

然后在你的 Controller 中:

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

}])

使用此模式允许您为新创建的工厂配置一个提供者,这样您就可以在配置阶段设置您的 configurableSetting,轻松地在您的模块或应用程序中添加通用功能,而无需显式在每次调用中定义它。

有关其工作原理的更多详细信息,请查看有关提供程序的 Angular 开发人员指南:http://docs.angularjs.org/guide/providers

关于javascript - AngularJS 全局 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23071649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com