控制器调用时需要工厂方法

时间:2013-06-12 09:28:55

标签: angularjs requirejs angularjs-service angularjs-factory

我正在使用angularJS和requireJS种子,你可以在这里下载:LINK

在该种子中,只有被调用的控制器才会下载相关的控制器,然后触发该控制器。我一直试图从我的控制器调用一个工厂(没有运气)加上我希望服务/工厂只下载相关的工厂,如果它被调用。

我试图在工厂方法中要求一个函数(很像控制器),但它不起作用。

这是我离开的地方:Plunkr link

1 个答案:

答案 0 :(得分:0)

user971824。

我把一些我称为couchPotato的东西放在一起,使用requirejs和$ routeProvider(或任何其他基于懒惰承诺的解析器的路由器)的分辨率功能,懒惰注册任何角度。

我已经创建了一个基于你的plunker,演示了如何使用couchPotato来完成它。如果你看一下它,我想你会发现它有点简单,因为你实际上没有为懒惰注册的所有东西创建模块。

couchPotato从我在网上找到的其他一些示例应用程序中发展而来。我想要的是进行懒惰注册的紧凑方式,提供者/服务组合似乎是理想的。我还希望保持一个组件依赖另一个组件的能力,比如在您的示例中,您希望控制器依赖于工厂... couchPotato允许您在requirejs语法中指定这些依赖项。

所以你的控制器在我的演绎中看起来像这样:

define(['app', 'myFactory'], function(app) {
  app.couchPotato.registerController([
    'mycontroller',
    [
      'myFactory',
      function(myFactory) {
        var message = myFactory.getCustomers();
        alert(message);
      }
    ]
  ]);
});

在这个例子中,我使控制器,工厂和值都变得懒惰,但你可以选择并在配置时注册“老式方式”,其他人在需要时注册了couchPotato给定的路线。

http://plnkr.co/edit/Z3v1mszQiiq024po8Ocp?p=preview

有几点需要注意: 1)我输入了一个默认路由,以触发控制器,服务(工厂)和版本值的延迟加载。 2)我修改了你的服务以附加版本只是为了显示一个组件如何依赖另一个组件(服务取决于版本值,控制器取决于服务)。

所以,在require配置中,你实际上并没有指定任何一个...它都在你的路线中懒散地完成。

$routeProvider.when('/',
 $couchPotatoProvider.resolveDependenciesProperty({
  templateUrl:'home.html',
  controller: 'mycontroller',
  dependencies: [
   'mycontroller'
  ]
 })
);

由于mycontroller依赖于myFactory而myFactory依赖于版本,所以当你的路线显示时,它们都可用并连接起来。我在home.html部分中添加了一些虚拟文本,仅用于踢,但控制器由$ routeProvider分配,因此您实际上不需要在模板中指定它。

couchPotato住在https://github.com/afterglowtech/angular-couchPotato,如果你想看到其他一些样品。我在依赖于角度时对它进行了简化,因为我将其设计为在整个应用程序不一定使用requirejs的情况下可用...因此,如果 使用requirejs加载角度,则需要使用垫片/ deps技术使couchPotato依赖于角度。

LMK如果您有任何问题/意见......希望这有帮助!