我使用的是一个angularJS和requireJS种子,您可以从这里下载:LINK
在该种子中,只有被调用的控制器下载相关的控制器,然后该控制器被触发。我一直在尝试从我的控制器调用工厂(没有成功),另外,我希望服务/工厂只在被调用的情况下才下载相关的工厂。
我曾尝试在工厂方法中请求一个函数(很像控制器),但它不起作用。
这就是我停下来的地方:Plunkr link
发布于 2013-06-16 10:32:32
user971824。
我已经将一些我称之为couchPotato的东西组合在一起,它使用$routeProvider (或任何其他执行基于惰性承诺的解析的路由器)的要求和解析特性在angular中延迟注册任何东西。
我已经根据您的示例创建了一个柱塞,演示了如何使用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。我在依赖angular中填充了它,因为我设计它的目的是为了在整个应用程序不一定使用requirejs的情况下使用它。因此,如果您正在加载angular和couchPotato,则需要使用shim/deps技术使其依赖于angular。
LMK如果你有任何问题/建议...希望这能有所帮助!
https://stackoverflow.com/questions/17062037
复制相似问题