我正在使用 angularJS 和 requireJS 种子,您可以在此处下载:LINK
在那个种子中,只有被调用的控制器下载相关的控制器,然后触发。我一直在尝试从我的控制器调用工厂(没有运气),而且我希望服务/工厂仅在已调用相关工厂时下载相关工厂。
我试图在工厂方法中要求一个函数(很像控制器),但它不起作用。
这是我离开的地方:Plunkr 链接
用户 971824。
我已经将我称之为 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加载角度,您需要使用couchPotato依赖于角度shim/deps 技术。
LMK 如果您有任何问题/意见......希望这会有所帮助!