创建可重用的AngularJS提供程序/指令/工厂等

时间:2014-02-19 23:35:03

标签: javascript angularjs

我正在尝试创建一些可以跨应用程序和模块重用的AngularJS库。我以为我正在做的一切正确,但仍然有问题。

首先,我创建一个定义通用模块(app.ui)的文件,并将提供程序(LayoutManager)附加到它... (我正在使用一个名为&#34的jQuery插件; jQuery Layout"这个提供程序允许应用程序访问和操作布局参数。但是我不想挂断插件的细节。这个问题比较笼统,但我想至少应该提供一些解释

angular.module("app.ui", [])
    .provider('LayoutManager', [function () {
        'use strict';

        var appLayout = $('body').layout(),
        moduleNavLayout = $('.module-nav-container').layout(),
        moduleLayout = $('.module-content-container').layout();

        return {
            $get: function () {
                return {
                    ApplicationLayout: appLayout,
                    ModuleNavigatonLayout: moduleNavLayout,
                    ModuleContentLayout: moduleLayout
                }
            }
        }
    }]);

然后我将模块(app.ui)识别为" app"的依赖关系。 (ListMgrApp)我想在它中使用它。

angular.module("ListMgrApp", ["ui.router", "app.services", "app.ui"])

然后我将特定提供者(LayoutManager)注入(是正确的术语吗?)到应用程序中......

angular.module("ListMgrApp", ["ui.router", "app.services", "app.ui"]).
    config(['$stateProvider', 'LayoutManager',
        function ($stateProvider, layout) {
            'use strict';
            // initialization code goes here
        }]);

虽然看起来LayoutManager提供程序中的代码执行了,我认为这是因为它被包含为应用程序的依赖项,但是当它运行时,我仍然从应用程序中收到以下错误。

Uncaught Error: [$injector:modulerr] Failed to instantiate module ListMgrApp due to:
Error: [$injector:unpr] Unknown provider: LayoutManager

我已经确认所有必需文件的源代码都已成功下载。

我错过了什么?

解决

感谢 elclanrs 的答案!我只想添加我更新的内容以使其正常工作。

我添加了#34;提供商"到app(ListMgrApp)的config()方法中的提供程序(LayoutManager)的名称。我原本以为我应该也改变" LayoutManager"的名称。在提供商代码中但误读了原始解决方案评论。仅更改app config()方法中的名称。我想我会在这里指出它以防万一其他人是一个"撇去"并错过了它。

angular.module("ListMgrApp", ["ui.router", "app.services", "app.ui"]).
    config(['$stateProvider', 'LayoutManagerProvider',
        function ($stateProvider, layout) {
            'use strict';
            // initialization code goes here
        }]);

0 个答案:

没有答案