【发布时间】:2014-03-11 05:00:35
【问题描述】:
我已经配置了几个路由的resolve 参数以返回一个承诺,以便延迟控制器的实例化,直到承诺得到解决。目前我使用的是函数符号,而不是指定要注入的字符串。
例如:
.when('/article/:id', {
templateUrl: 'app/article/article.html',
controller: 'ArticleController',
resolve: {
article: ['Content', '$route', function (Content, $route) {
return Content.get({ contentId: $route.current.params.id }).$promise;
}]
}
})
article 参数已正确注入解析的承诺值。
但是,我想保持它 DRY 并通过指定一个字符串来注入这个值,就像 mentioned in the documentation 一样。
当我设置一个工厂函数来提供这样的承诺时,实例只被正确注入一次(第一次)。此后,由于 AngularJS 注入服务已经缓存了该实例,因此使用了相同的 promise。
.factory('contentPromise', ['Content', '$route', function (Content, $route) {
return Content.get({ contentId: $route.current.params.id }).$promise;
}])
是否可以指定每次请求时都必须运行工厂函数?或者以其他方式实现我的目标?
【问题讨论】:
-
第一个例子就是要走的路。
-
嗨,我正在尝试做同样的事情。您在哪里/如何定义内容?我知道你正在使用 ngResource。内容是否在 .config 中定义?
-
注册为工厂,返回
$resource('api/Content/:id')
标签: javascript angularjs ngroute