Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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 AngularJS全局控制器_Javascript_Angularjs_Controllers - Fatal编程技术网

Javascript AngularJS全局控制器

Javascript AngularJS全局控制器,javascript,angularjs,controllers,Javascript,Angularjs,Controllers,在我的角度应用程序中,我有几个函数,我认为应该在全局控制器中。在服务器端MVC框架中,通常有一个全局控制器,所有其他控制器都会扩展它,这就是我放置这些函数的地方。我想知道有没有像这样的东西 所以现在我在app.js的app.js中看到了这个: 'use strict'; // Declare app level module var app = angular.module('app', ['ngRoute']).config(['$routeProvider', '$locationProv

在我的角度应用程序中,我有几个函数,我认为应该在全局控制器中。在服务器端MVC框架中,通常有一个全局控制器,所有其他控制器都会扩展它,这就是我放置这些函数的地方。我想知道有没有像这样的东西

所以现在我在app.js的
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

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

});
这在
controllers.js中:

'use strict';

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

    // Possible routes can go here

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

});
我希望能够在我的应用程序中添加下载,因此我将在
下载控制程序中编写
$scope.addDownload=function(){…}
。这将起作用,但是我希望能够在我的应用程序中的任何位置添加下载,这意味着无论我在哪个控制器中,都要调用
addDownload()
函数


我是否可以定义一个全局控制器来保存
addDownload()
函数,并能够从我的所有控制器调用该函数?

我可以推荐几种不同的方法。首先,即使在基于服务器端的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
,轻松地跨模块或应用程序添加通用功能,而无需在每次调用中明确定义


有关如何工作的更多详细信息,请查看Angular Developer指南中关于提供程序的部分:

这是您将使用的指令,或者提供程序。您可以创建一个服务来重用函数,并插入任何您想要的控制器……这就是我刚才说的……)了解你的角度。与你的angular保持一致。或者,只需添加一个控制器,并将其用作应用程序级控制器。