16

我正在尝试实现这样的程序结构:

在此处输入图像描述

这里的问题是,当一开始没有明显的控制器使用 Features 时,它们没有被实例化,也没有在 中注册FeatureRegistry,因此它们不能显示在 View 中。但我想要实现的是它们显示在视图中,然后通过加载模板ng-include,然后在模板中为每个功能都有特定的控制器。这些控制器是使用功能的控制器。

这些功能基本上只是用来说明模板和图标的位置、使用哪个以及启动功能的开始。

但回到我最初的问题:
即使目前不需要服务,如何实例化服务?

或者是否有其他功能,我可以使用它来代替服务?我也想如果你指出我的话:)

4

2 回答 2

22

run您可以在应用程序的一部分中请求它,注入器将调用它。

angular.module("myApp", []).
    factory("EagerService", function () {
        console.log("I'm ready.");
    }).
    run(function (EagerService) {
        console.log("EagerService is ready.");
    });

然而,据我了解,您有需要 this 的子/子控制器EagerService。你为什么不在那里注射呢?

于 2013-03-21T17:33:41.767 回答
8

(因为这是相对较旧的 - 这个答案是为未来的读者准备的 - 但我偶然发现了这个问题,所以也许其他人也会)如果你使用提供者/配置块 - 它们是急切地完成的,所以最好在那里做急切的初始化代码。您正在/可能正在考虑服务/运行块。

为了用代码进行演示,这个警报不会弹出(假设myServiceModule是您的应用程序依赖的模块并且myService没有在任何地方注入):

angular.module('myServiceModule', []).service('myService', function () {
    alert("service");

    // service
    return {};
});

但是,即使没有人依赖该myProvider服务,也会弹出此警报:

angular.module('myProviderModule', []).provider('myProvider', function () {
    alert("provider");

    // Define your service here. Can be an array of inject-ables 
    // instead of a function.
    this.$get = function () {
        // service
        return {};
    };
});

您可以在这个plunker中看到这一点。

在此处的官方文档中阅读有关提供程序的更多信息。

于 2014-09-01T19:48:54.683 回答