【问题标题】:AngularJS global controllerAngularJS 全局控制器
【发布时间】:2014-04-14 22:39:12
【问题描述】:

在我的 Angular 应用程序中,我有一些我认为应该在全局控制器中的功能。在服务器端 MVC 框架中,通常有一个所有其他控制器都扩展的全局控制器,这是我放置这些功能的地方。我想知道 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() { ... }。这将起作用,但是我希望能够在我的应用程序的任何位置添加下载,这意味着无论我在哪个控制器中都调用 addDownload() 函数。

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

【问题讨论】:

  • 这是您将使用指令或提供者的目的。
  • 您可以创建一个服务来重用这些功能并注入您想要的任何控制器......
  • 这就是我刚才所说的...... :) 知道你的角度。与你的角度合一。
  • 或者,只需将控制器添加到 并将其用作应用级控制器。

标签: javascript angularjs controllers


【解决方案1】:

我可以推荐几种不同的方法。首先,即使在基于服务器端的 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 开发人员指南:http://docs.angularjs.org/guide/providers

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    相关资源
    最近更新 更多