【问题标题】:Configuring AngularJS modules - how does it affect the other modules in the app?配置 AngularJS 模块 - 它如何影响应用程序中的其他模块?
【发布时间】:2013-08-23 15:22:13
【问题描述】:

我有两个 Angular 模块,ABA 没有 deps,一些配置和一些过滤器:

angular.module('A', [])
    .config(function ($httpProvider) {
    // set common headers for $http requests
        $httpProvider.defaults.headers.common = {...};
    })
    .filter('myFilter', function () {
        // create a filter
    });

B 依赖于A,所以它类似于:

angular.module('B', ['A'])...

我知道B 取决于A 意味着我可以在B 视图中使用myFilter

问题是:myFilter 中的代码是否受益于我在A 模块的config() 函数中设置的$http 通用标头(因为myFilter 属于A)?

当从 B 模块内部发出 HTTP 请求时,公共标头是我在 A 中设置的,还是不受 A 内部配置的影响?

这两个问题对我来说都足够有意义:我在 A 模块中配置了一些常见的标头,我将在 A 模块提供的过滤器中使用它们,但我希望这些相同的常见标头不可用当我在 B 模块内时,我的方式;尽管如此,当我在 B 视图中时,我希望能够使用 A 过滤器及其特定的公共标题。

【问题讨论】:

    标签: angularjs angularjs-module


    【解决方案1】:

    这是我的想法。像任何其他角度 $httpProvider 本质上也是单例的,这很好地意味着从任何地方对其进行的任何更改,包括任何模块都会影响其他,或者换句话说,更改是全局的。

    【讨论】:

    • 我认为 Chandermani 是正确的,如果您只想为模块 A 添加标头,那么可能在 .value/factory 提供程序中拥有一组公共标头,它返回带有这些标头的 $http修改。
    • 好的。因此,如果我必须做相反的事情,即为我的整个应用程序配置一些公共标头,也许最干净的方法是创建一个 configurator 模块来执行整个应用程序共享的配置。
    • @leon 是的,这可以解决问题。尽管如此,我认为我认为它的工作方式仍然更漂亮,因为我可以拥有一个具有自己的模块化功能的模块,并为 $httpProvider 等对象配置他自己的配置,在我看来这将使其具有更高的可重用性。跨度>
    • 是的,看起来是这样,但我想不出太多场景,您希望每个模块都有一个单独的 $http 对象。单个模块负责所有 http 请求是很常见的,这似乎是一种极端情况。
    【解决方案2】:

    在任何一个应用程序中,无论你拉入什么模块,所有servicesfactoriesproviders 都是单例

    您正在使用$httpProvider,这样的单例...因此,就单例的本质而言,对提供者进行的任何配置都意味着所有模块都会受到影响

    【讨论】:

      【解决方案3】:

      是的,这就是它的工作原理。见例子。

      angular.module("foo",[]).config(function($httpProvider){$httpProvider.test = 123});
      angular.module("bar",["foo"])
        .config(function($httpProvider){console.log(httpProvider.test)}); //123
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 2015-09-07
        • 2019-01-01
        相关资源
        最近更新 更多